作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 [Product]-1-*-[Component]。所以当我删除一个产品时,我希望 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/en-us/library/ms186973.aspx
关于sql-server - 一对多关系的级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6158993/
我是一名优秀的程序员,十分优秀!