我有[产品] -1 - * - [组件]。因此,当我删除产品时,我希望EF删除其所有组件。在设计器中,我选择关系并将End1的OnDelete属性设置为Cascade,其多重性为0..1 - 这会产生如下内容:
ALTER TABLE [dbo].[Components]
ADD CONSTRAINT [FK_ProductComponent]
FOREIGN KEY ([Product_Id])
REFERENCES [dbo].[Products]
([Id])
ON DELETE CASCADE ON UPDATE NO ACTION;
对我而言,意味着当删除组件时,删除应该级联,并且相关产品也应该被自动删除。
这是我想要的倒退。所以我将End2的属性编辑为Cascade(End1重置为None)但是在尝试保存模型时我得到了:
Error 28 Running transformation: End 'Text' on relationship
'EF.ProductComponent' cannot have operation specified since its multiplicity
is '*'. Operations cannot be specified on ends with multiplicity '*'. C:\Users
\me\Documents\Visual Studio 2010\Projects\X\Website\Models\EF.edmx
显然我不明白这一点。可以做我想做的事,不是吗?如何?
答案 0 :(得分:3)
这是一个很好的链接,可以详细解释它。但简而言之,EF在处理级联删除方面不是很可靠。您应该手动在数据库端设置它,因为EF可能没有。
http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx
我的答案的第二部分是......级联删除的工作方式是,如果删除父级...所有子级也会被删除。无论您是否进行级联删除,删除子项对父级都没有影响。
是的,ON DELETE CASCADE应出现在子表的外键约束中。
另一个有良好信息的链接:http://msdn.microsoft.com/en-us/library/ms186973.aspx