[英]Adding list of objects in EF Core is adding more entries than exist
我有一個父 object,它有一個子 object 列表。 普通的 POCO,沒什么特別的。 EF 語法是一對多的。
在我的 dbcontext 中,我有以下內容:
if (parent.childObjectList.Any())
{
foreach (var x in parent.childObjectList)
{
x.Id = 0;
x.ParentId = parent.Id;
}
parent.childObjectList.ForEach(n => _context.ChildObjects.Add(n));
await _context.SaveChangesAsync();
}
model 構建器中的 EF 語法:
entity.HasMany(p => p.ChildObject)
.WithOne(e => e.Parent)
.HasForeignKey(p => p.ParentId)
.OnDelete(DeleteBehavior.Restrict);
在子 EF 語法中:
entity.HasOne(x => x.Parent)
.WithMany(x => x.ChildObject)
.HasForeignKey(x => x.ParentId)
.OnDelete(DeleteBehavior.NoAction);
當我運行它時,如果列表中有兩個子對象,則會在數據庫中創建 4 個條目。 如果列表中有 3 個,則創建 6 個。 我的語法哪里錯了?
一方面,手動持久化子實體是完全沒有必要的。 當您在其下創建 Parent 和新的 Child 實例並添加 Parent 時,然后調用SaveChanges
,子級將自動持久化,並且 FK 將自動填充。 此外,配置關系只需要在一側完成。 即來自具有HasMany().WithOne()
的父母,或來自具有HasOne().WithMany()
的孩子,而不是兩者。
雙重輸入的典型原因是當您創建全新的引用、設置 PK 和 FK 並將這些實體添加到另一個的集合和保存時。 EF 不會跟蹤這些新實例,因此它將它們視為您期望和更新的插入。 這看起來不是這里發生的事情,但可能是類似的事情,通過重置 ID EF 將這些視為導致雙倍的新實例,因為如果已經保存了父記錄,那么子記錄也已經保存了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.