I send the user object in Json format in my HTTP request as follows:
POST http://localhost:52054/api/Authentication/DeleteAccessToken HTTP/1.1
Host: localhost:52054
Content-Type: application/json
{"id":1,"userName":"mnoureldin","accessToken":{"id":1,"token":"123ABC456EFG","userId":1}}
And my controller (in EF-core ) handles the following:
[HttpPost]
public IActionResult DeleteAccessToken([FromBody]User user)
{
using (var Context = new UnitOfWork().Context)
{
var userEntity = Context.Users.Find(user.Id);
if (userEntity != null)
{
var accessTokenEntity = Context.AccessTokens.Find(userEntity.AccessToken.Id);
Context.AccessTokens.Remove(accessTokenEntity);
return Ok();
}
else
{
return Unauthorized();
}
}
}
But the line Context.AccessTokens.Remove(accessTokenEntity);throws this exception:
An exception of type "System.InvalidOperationException" occurred in Microsoft.EntityFrameworkCore.dll, but was not processed in the user code
: "AccessToken" , . , , (.. ). , , . , .
AccessToken userEntity .
UnitOfWork:
public UnitOfWork()
{
var optionsBuilder = new DbContextOptionsBuilder<CustomDbContext>();
optionsBuilder
.UseMySQL(@"server=192.168.1.35; port=3306; sslmode=none;
userid=root;
pwd=P@ssword;
database=dotnet;");
Context = new CustomDbContext(optionsBuilder.Options);
Context.AccessTokens.Load();
}
My CustomBdContext:
public class CustomDbContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<AccessToken> AccessTokens { get; set; }
public CustomDbContext(DbContextOptions options) : base(options)
{
}
}
:
User ----- AccessToken
:
public class User
{
public int Id { get; set; }
public string UserName { get; set; }
public virtual AccessToken AccessToken { get; set; }
}
:
public class AccessToken
{
public int Id { get; set; }
public string Token { get; set; }
[ForeignKey("User"), Required]
public int UserId { get; set; }
public virtual User User { get; set; }
}
- ? , .