EF 4.0中缺少多对多链接表的错误或功能?

时间:2011-11-11 22:42:02

标签: entity-framework

我有评论和问题。实体框架4.0没有在两个表之间的多对多关系中显示链接表,例如Northwind中显示的“Order_Details”,订单和产品之间的链接表,如果只使用两个列,都使用两个主键在链接表中,通常是这种情况。因此,在Northwind中,如果在订单和产品之间的Order_Details链接表中使用OrderID和ProductID作为主键,对于多对多关系,如果仅存在这两列(主键),则链接表将不会显示在Order_Details。

因此,您无法在多对多关系链接表中插入或创建,因为Entity Framework 4.0不显示链接表Order_Details,Intellisense也不会显示此多对多关系的链接表。如果EF 4没有显示隐藏的链接表,那么如何在链接表中进行插入或更新?诸如“你现在必须开始在OOP中思考”之类的争论并没有让我印象深刻。 SQL有一定的结构,OOP只是它的接口所以我们可以使用LINQ到实体而不是笨拙的SQL查询,IMO。

在这里为Silverlight建议了解这个bug的诀窍http://forums.silverlight.net/t/159414.aspx/1,它适用于Web服务和任何其他.NET解决方案:只需在链接表中添加任何类型的虚拟列。

现在删除原始.edmx文件,并通过针对实际数据库生成它来重建新文件。

然后intellisense显示链接表,然后您可以插入/创建并执行其他正常操作。

例如,EF 4.0中的Intellisense现在将显示链接表Order_Details,您可以创建或插入诸如(部分片段,省略try / catch和任何回滚选项):

           using (aDBEntity context = new aDBEntity())
               Order_Details newOrdDetails = new Order_Details();
        newOrdDetails.OrderID = //some number here
        newOrdDetails.ProductID = //some number here

               context.AddToOrder_Details(newOrdDetails);
               context.SaveChanges();

问题:是否缺少显示多对多链接表的错误或EF 4.0的功能?

1 个答案:

答案 0 :(得分:3)

就个人而言,如果您没有任何其他列而不是两个键,我认为不需要链接表。我从来不需要访问仅用于定义M2M关系的链接表。通过首先获取Foo(或Bar)并使用Foo,我可以放心地添加BarFoo.Bars.Add(sampleBar)之间的关系。

我想你回答了你的问题。如果您认为OOP,这是一个功能。如果你想访问链接表(并且你认为你正在以正确的方式进行),那么这是一个缺乏功能。