gpt4 book ai didi

sql-server - 一对多关系的级联删除

转载 作者:行者123 更新时间:2023-12-04 01:00:51 24 4
gpt4 key购买 nike

我有一个 [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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com