2010-10-11 123 views
2

我试图创建一个1:使用实体框架(.NET 4.0)M关系,并正在以下错误:定义1到实体框架多对多关系

App_Code.Model.msl(36,6) : error 3007: Problem in mapping fragments 
starting at lines 6, 36:Column(s) [ProductId] are being mapped in 
both fragments to different conceptual side properties. 

我有什么是产品表和功能表。这个想法是产品有很多特点。每个产品都有一个ProductId,并且这些Features具有一个ProductId外键。

现在的问题是外键在sql server中不存在,我不希望它。如果确实如此,那么它全部自动地很好地工作。

在EDMX设计器中,我创建了一个从产品到特征实体的关联,然后将ProductFeature关联的映射细节编辑为基于Features表,我认为它会使其工作。

任何想法?非常感谢。

+0

你为什么不想要的FK?忘记EF一秒钟,这将如何从SQL Server的角度工作?您需要功能上的FK来了解它属于哪个“唯一”产品记录。如果你说你不想要这个FK,这听起来像是多对多,在这种情况下,你需要一个联结表(即ProductFeatures - 就像下面的答案一样)。 – RPM1984 2010-10-11 23:36:07

+0

是否有任何特别的原因,您没有使用外键?我明白这只是一个简单的例子,但从你的描述来看,它应该是一个FK。 – 2010-10-11 23:40:56

+0

@ RPM1984 - 我不想对数据库进行更改,因为这是针对现有应用程序/数据库的,而不是绿地的情况。 – Chris 2010-10-11 23:51:05

回答

0

这是一个M×N的关系。为什么?因为某个功能可以分配给多种类型的产品。

你应该有一个表,产品属性,像这样:

ProductId FeatureId 
1   1 
1   2 
2   1 
2   2 
+0

嗨,这只是一个简单的例子,学习的目的,在一个真实的应用程序,你是对的,它会像你描述,但在这种情况下,我试图处理1:m关系。 – Chris 2010-10-11 23:33:17

0

找到一个解决办法:删除标酒店需要从功能实体“产品ID”:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/a71901fb-97ec-4072-949a-c0c66a9775b1

然而,在汽车 - 如果您在数据库中设置外键,那么EF会为您提供生成的关系,例如'ParentId'字段,它们以标量字段存在于孩子中。

所以我还是有点困惑。

CNC中进一步帮助:

http://www.hanselman.com/blog/CreatingAnODataAPIForStackOverflowIncludingXMLAndJSONIn30Minutes.aspx

+0

可能与设计器生成的代码/ xml有关。我从1.0版本开始就没有使用过EF,但我记得通过直接编辑UI/Designer不支持的xml可以做很多事情。 – 2010-10-11 23:46:53

+0

感谢confusedgeek,也许我会直接粉笔写这个VS. – Chris 2010-10-11 23:51:38