我有评论和问题。实体框架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的功能?
答案 0 :(得分:3)
就个人而言,如果您没有任何其他列而不是两个键,我认为不需要链接表。我从来不需要访问仅用于定义M2M关系的链接表。通过首先获取Foo
(或Bar
)并使用Foo
,我可以放心地添加Bar
和Foo.Bars.Add(sampleBar)
之间的关系。
我想你回答了你的问题。如果您认为OOP,这是一个功能。如果你想访问链接表(并且你认为你正在以正确的方式进行),那么这是一个缺乏功能。