如何解决一对多关系上的级联删除
| 我有一个[产品] -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
显然我不明白这一点。有可能做我想做的,不是吗?怎么样?
解决方法
这是一个很好的链接,详细说明了它。但简而言之,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/zh-cn/library/ms186973.aspx
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。