一对多关系上的级联删除

问题描述

| 我有一个[产品] -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     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...