我正在使用實體框架和DbContext API來構建我的應用程序,但我無法處理具有多對多關係的對象。簡化保存法可能看起來像這樣使用DbContext API添加和刪除多對多API
public void MyObj_Save(MyObj myobj)
{
DbContext.Entry(myobj).State = EntityState.Added;
DbContext.SaveChanges();
}
此代碼工作正常,但如果MyObj中包含了許多一對多的關係,這是不會被保存。我使用舊的POCO API,我需要附上相關對象上下文知道,但我不能找到一種方法,用的DbContext API正確地做到這一點 - 以下
public void MyObj_Save(MyObj myobj, List<OtherObj> otherObjList)
{
foreach (OtherObj otherObj in otherObjList)
{
DbContext.OtherObj.Attach(otherObj);
myobj.OtherObj.Add(otherObj);
}
DbContext.Entry(myobj).State = EntityState.Added;
DbContext.SaveChanges();
}
一個簡單的例子我沒有得到任何錯誤,但關係不會被保存。該怎麼辦?
它應該工作。是否保存了myobj?但連接表中沒有新行? – Slauma
通過將實體附加到上下文中,您不確定要實現什麼目標。如果你附加,那麼它「向ObjectContext添加一個對象,並將該對象設置爲Unchanged狀態。在Unchanged狀態下,實體框架將實體鍵值視爲final。如果多於一個特定類型的實體具有相同的鍵值,實體框架將拋出一個異常。爲避免發生異常,請使用AddObject方法附加分離的對象,然後相應地更改狀態。請參閱MSDN [文章](http://msdn.microsoft.com/en-us/library/bb896271.aspx)。 –
@EmmieGabrielleLewis:他想創建** new **對象'myobj'和**現有**對象'otherObjList'的列表之間的關係。使用'Attach'對此是正確的。 – Slauma