2010-10-19 97 views
2

我有一個實體框架項目設置。它它有四個表格和三個實體(「A」,「B」,&「C」)。有一個1:N A和B之間的關係,以及A和C,和一個之間:N B和C之間關係如何在實體框架中創建新對象時添加子關係

alt text

我使用以下代碼來嘗試添加新的「B 「實體:

A t = null; 
if (this.MyA == null) 
{ 
    t = new A() 
    { 
     EntityKey = this.MyAReference.EntityKey, 
     AId = (Guid)this.MyAReference.EntityKey.EntityKeyValues[0].Value 
    }; 
} 
else 
{ 
    t = this.MyA; 
} 
this.MyA = null; 
context.Attach(t); 
this.MyA = t; 

的 」B「 對象(」 這「)具有的一個子集 」C「 的對象。這些「C」對象已經存在於數據庫中,但與新對象無關(顯然)。當我調用「SaveChanges()」時,它會拋出一個異常,因爲它試圖將所有子「C」對象添加到數據庫中的新對象。

我怎樣才能讓它在「Table_JoinBC」中創建引用,而不是嘗試重新創建「C」對象?

感謝您的任何幫助。

回答

2

它,如果你使用stub entities

你說,你想添加一個新的B對象更容易。並增加一個B對象,你需要一個一個對象

下面是一個使用存根實體的例子:

A myAObject = new A { A_Id = 5 }; 

Context.AttachTo("Aes", myAObject); 

B myBObject = new B { B_ID = 6, A = myAObject); 

Context.AddToBes(myBObject) 
Context.SaveChanges(); 
+0

一個有用的提示,但它似乎並沒有解決問題。我嘗試了幾種不同的配置,但沒有運氣。 – Sako73 2010-10-19 19:24:06

+0

@ Sako73 ...我剛剛更新了一個關於如何使用STUB實體添加新B對象的例子的答案 – 2010-10-19 19:31:27

+0

如果您不確定A是否在數據庫中並且處於內部狀態,那麼做同樣的事情時最短和最乾淨的解決方案是什麼?有些情況下也應該插入? – watbywbarif 2015-03-18 08:16:33

1

這是我得到了什麼工作,與孩子集合:

A myAObject = new A { A_Id = 5 }; 

Context.AttachTo("Aes", myAObject); 

B myBObject = new B() { 
    B_ID = 6, 
    A = myAObject}; 

foreach(C c_obj in CsCollection){ 
    Context.AttachTo("Cs", c_obj); 
    myBObject.C.Add(c_obj); 
} 


Context.AddToProducts(myBObject) 
Context.SaveChanges(); 

謝謝。

相關問題