[英]EF Core 5.0 Many-To-Many delete from nested collection
我的模型是这样的(简化):
public class Request
{
public string Id { get; set; }
public List<Tag> Tags { get; set; }
}
public class Tag
{
public string Id { get; set; }
public List<Request> Requests { get; set; }
}
DatabaseContext(如此处的文档所示: Many-To-Many ):
builder.Entity<Request>()
.HasMany(r => r.Tags)
.WithMany(f => f.Requests)
.UsingEntity(j => j.ToTable("request_tags"));
如何在不删除标签本身的情况下从 Request.Tags 集合中删除元素? 基本上我需要删除连接表中的条目。 我在 controller 中尝试过这样的事情:
[HttpGet("[action]")]
public async Task<IActionResult> DeleteTag(string requestId, string tagId)
{
var request = await _context.Requests
.Include(r => r.Tags)
.SingleOrDefaultAsync(r => r.Id.Equals(requestId));
var itemToDelete = request.Tags.SingleOrDefault(f => f.Id.Equals(tagId));
request.Tags.Remove(itemToDelete);
_context.Requests.Update(request); //AsNoTracking behaviour is enabled
await _context.SaveChangesAsync();
return Ok();
}
而且它没有效果。 我可以通过_context.Database.ExecuteSqlRaw()手动删除连接表上的行,但这似乎是解决方法。 有没有更好的办法?
这是我的想法,我认为这是因为默认情况下 EF 要求您具有表现力,所以您不会伤害自己。 您的代码称为Update()
,这意味着您要更新记录,而不是进行任何删除。 它希望您对记录集本身调用 Remove()。
将您的 Remove 调用更改为:
_context.Tags.Remove(itemToDelete);
更新:刚刚在这里看到这个,它可能是你正在寻找的,阅读那个链接,虽然我从来没有尝试过:
.OnDelete(DeleteBehavior.ClientCascade);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.