在Entity Framework中删除对象及其所有子对象?

时间:2011-02-22 22:08:14

标签: entity-framework one-to-many cascading-deletes

我一直试图在这里找到这个问题的答案。有几个人似乎在问类似的事情,但我没有得到答案。我有一个EF实体,有一堆子实体(一对多关系)。我希望能够删除“父”实体并同时删除所有子实体。

有人提到“Cascade Delete”应该在EF模型和数据库上设置(在我的例子中是Sql Server)。问题是:

  1. 我完全不知道怎么做(似乎暗示在你应该知道的那些答案中,但很抱歉......)
  2. 我有一种感觉,我之前遇到过类似的问题,并且找到了一个比设置Cascade Delete更简单的答案。我可能错了,也许这是唯一的方法,但如果有一个更简单的解决方案,我想知道。
  3. 在任何一种情况下,都会非常感谢一个明确的如何使这个工作的例子!

2 个答案:

答案 0 :(得分:5)

在SQL Managment Studio中,转到数据库并找到应该有外键的表。将外键添加到指向另一个表的表中。我假设您知道如何设置外键。在对话框窗口底部的外键设置中,您将看到Delete属性。将其设置为Cascade。每当删除父行时,这将导致删除任何相关行。然后在Visual Studio中更新您的数据模型。现在应该为你设置一切。

答案 1 :(得分:0)

以下是MSDN上的一些relevant documentation。请注意,示例中似乎存在错误。使用此配置时,我从EDMX设计器收到以下错误。

  

无法在具有多重性'*'的末尾指定操作。

你应该将OnDelete属性设置为Cascade,最后将触发另一端的删除。

例如,在涉及客户和订单的关系中,您希望将客户的订单与客户一起删除,您应该将客户角色的OnDelete属性设置为Cascade。

请注意,只有已加载到ObjectContext中的对象才会受到级联删除的影响。您将依赖于在数据库中设置的级联删除来管理任何其他记录。