我有对象: A型(Id,Name), B型(AId,描述)。
我想将关系1对1(并创建1对1 [0..1])。所有的作品都很好地删除了类型A的对象。当我试图从类型A中删除某个对象时,会发生异常。
正在从AssociationSet'...'添加或删除关系。对于基数约束,还必须添加或删除相应的“...”。
我搜索了解决方案(发现编辑多对多的CSDL),但没有任何帮助。数据库中的表中还定义了级联操作。
有什么建议吗?
UPD:谢谢你的回答。 让我们说清楚一点。我不想在A和B之间实现无效
我尝试通过编辑edmx文件来修复问题(就像这个http://codepolice.net/2008/12/16/cascade-delete-in-entity-framework/),但没有运气。似乎它只适用于一对多。
我只想拥有一对一关系的2个对象。例如,Order和OrderDetails。我期望为我的每个订单自动创建/删除OrderDetails。
答案 0 :(得分:1)
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个表。参见:
答案 2 :(得分:0)
Visual EntityFramework工具无法正确识别“删除级联”并创建不完整的xml映射。您必须更改edmx文件(您可以使用记事本执行此操作)。说明:
http://codepolice.net/2008/12/16/cascade-delete-in-entity-framework/
为我工作。
答案 3 :(得分:0)
只需建立一对多的关系,然后通过在数据库中的外键上创建唯一约束,可以强制它为1:1。您可以找到有关它的完整教程here
(这使用Code-First)