[英]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.