如何使“1对1”关联在Entity Framework中正常工作?

时间:2009-10-03 17:17:16

标签: entity-framework

我有对象: A型(Id,Name), B型(AId,描述)。

我想将关系1对1(并创建1对1 [0..1])。所有的作品都很好地删除了类型A的对象。当我试图从类型A中删除某个对象时,会发生异常。

正在从AssociationSet'...'添加或删除关系。对于基数约束,还必须添加或删除相应的“...”。

我搜索了解决方案(发现编辑多对多的CSDL),但没有任何帮助。数据库中的表中还定义了级联操作。

有什么建议吗?

UPD:谢谢你的回答。 让我们说清楚一点。

  1. 我不想在A和B之间实现无效

  2. 我尝试通过编辑edmx文件来修复问题(就像这个http://codepolice.net/2008/12/16/cascade-delete-in-entity-framework/),但没有运气。似乎它只适用于一对多。

  3. 我只想拥有一对一关系的2个对象。例如,Order和OrderDetails。我期望为我的每个订单自动创建/删除OrderDetails。

4 个答案:

答案 0 :(得分:1)

如果你删除B对,

1:1应该例外吗?

我认为你想要的是0..1

右键单击Add-> associations。

在多重性下: 在左侧为A选择一个,为右边选择0或1。 如果你想要A的可选描述对象(B),我认为你需要这个。

您还可以将B的字段移动到A中,并检查这些字段是否为空?这可能更容易,然后我认为你可以使用A的字段。

另外,我不是一个长镜头的数据库设计师,但你不想要A中的A数据吗?

例如,如果你有“人”和他的“家”,我认为那些将是1:1(或0..1现实世界)的好例子,因为它们本身就是2个与其他对象不同的对象可以独立分享。

似乎A_DataObjects只会导致不必要的连接?

下面的旧答案(不是寻找继承,而是留给其他人): 好的,我想我今天碰到了这个。我想您可能想要做的是将2个类定义为基类(实体)的子类。右键单击并添加 - >继承开始。我还没有完成所有工作,但我认为它涉及在基类中指定一个字段,BaseType可用于键入派生类。

http://mosesofegypt.net/post/Inheritance-and-Associations-with-Entity-Framework-Part-1.aspx

请注意,这是第2部分和第3部分。

-David

答案 1 :(得分:0)

执行此操作的一种方法是将单个实体映射到2个表。参见:

http://msdn.microsoft.com/en-us/library/bb896233.aspx

答案 2 :(得分:0)

Visual EntityFramework工具无法正确识别“删除级联”并创建不完整的xml映射。您必须更改edmx文件(您可以使用记事本执行此操作)。说明:

http://codepolice.net/2008/12/16/cascade-delete-in-entity-framework/

为我工作。

答案 3 :(得分:0)

只需建立一对多的关系,然后通过在数据库中的外键上创建唯一约束,可以强制它为1:1。您可以找到有关它的完整教程here

(这使用Code-First)