[英]Entity Framework 5 add entity and child entities with other foreign key relationships
我正在使用Entity Framework(EF)5 Code First。
我有一個自引用對象,我們稱之為Demo
:
public class Demo
{
public int Id;
public string Name;
public Demo Parent;
public ICollection<Demo> Children;
public Item Item;
}
這引用了另一個對象Item
:
public class Item
{
public int Id;
public string Name;
public Item Parent;
public ICollection<Item> Children;
}
是的,它也是自引用,但這無關緊要。 現在,數據庫具有一個基於Item_Id
的外鍵,該外鍵是由數據庫遷移添加到Demo
表中的。 數據庫中預先填充了一組Item
記錄(數量有限)。
我的上下文已將此很好地映射到數據庫,並且正在做大量新記錄的數據插入。 還有另一段代碼用數據填充對象。 這是通過EF的實際導入:
public void ImportDemo(IEnumerable<Demo> demos)
{
var context = this.UnitOfWork.MyApplicationContext;
foreach (var demo in demos)
{
this.DataSet.Add(demo);
context.Entry(demo).State = EntityState.Added;
}
// NOTE: expecting an empty db.
context.SaveChanges();
}
我的DbModelBuilder具有以下內容:
modelBuilder.Entity<Demo>()
.HasOptional(p => p.Parent)
.WithMany(p => p.Children);
modelBuilder.Entity<Item>()
.HasOptional(p => p.Parent)
.WithMany(p => p.Children);
我可以成功導入Demo
實體以及子Demo
實體, 但是每個子Demo
實體都在數據庫中創建了一個新Item
,而不僅僅是鏈接到現有Item
。 父Demo
實體沒有Item
記錄,它們為空。
我如何確保子Demo
實體鏈接到現有的Item
記錄,而不是創建新的實體?
整個結構在業務層中設置,並映射( AutoMapper )到所討論的模型。
Item
對象位於DbContext.IDbSet<Item>.Local
集合中,但需要使用本地集合中的Item
對象重置模型中的虛擬Items
,如下所示。
public void ImportDemo(IEnumerable<Demo> demos)
{
foreach (var demo in demos)
{
foreach (var child in demo.Children)
{
child.Item =
dbContext.Items.Local.First(p => p.Id == child.Item.Id)
}
dbContext.Set<Demo>.Add(demo);
}
dbContext.SaveChanges();
}
我嘗試使用Attach()
但是它沒有表現出MSDN文檔中的預期。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.