2010-07-28 83 views
0

問候,ENtity框架中的多對多表格

我在ADO.NET實體框架中遇到困難。 我想在2個現有項目之間做一個關係,在多對多表中。

例子:

create table A(key int, value varchar(10)); 
create table B(key int, value varchar(10)); 

create table A_B(keyA int, keyB int);-- those are FK.. 

現在我想做兩者之間的關係,在Entitie框架, 我已經試過

A_B ab=new A_B{a=new A{key=1},b=new B{key=2}} 

但我得到的A 2種新元素和B表。

我該怎麼做?

預先感謝您

回答

1

應該有2個實體模型,你和class Aclass B。每個導航屬性都包含另一個類型的集合。

所以,你可以像這樣

var a = new A(); 
var b = new B(); 

a.CollectionOfB.Add(b); 

b.CollectionOfA.Add(a); 
+0

這不會解決他的問題。它仍然會在A和B表中放入兩個新對象,而不是使用現有對象。 – 2010-07-28 12:46:15

1

最簡單的辦法是加載實體:

A_B ab = new A_B{a= Context.As.Single(a => a.key=1), Context.Bs.Single(b => b.key=2)}; 

然而,開發商誰喜歡過早頻繁優化擔心2個數據庫讀取的性能開銷會壓縮他們的應用程序並嘗試使用存根實體。當你做到這一點,必須將它們附加到上下文:

var a = new A{key=1}; 
Context.AttachTo("As", a); 
var b = new B{key=2}; 
Context.AttachTo("Bs", b); 
A_B ab = new A_B{a = a, b = b}; 

EF 4可以讓你做到這一點,而無需使用CreateObjectSet的字符串。