2010-07-28 88 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的字符串。