删除对象及其相关实体

时间:2010-03-18 06:58:00

标签: c# entity-framework c#-4.0 linq-to-entities

有谁知道如何删除对象及其所有相关实体。

例如,我有表,Products,Category,ProductCategory和productDetails,productCategory正在连接产品和类别的表。

我已从http://msdn.microsoft.com/en-us/library/bb738580.aspx读到

  

删除父对象也会删除中的所有子对象   约束关系。此结果与启用相同   关系关联的CascadeDelete属性。

我正在使用此代码:

Product productObj = this.ObjectContext.Product.Where(p => p.ProductID.Equals(productID)).First();

if (!productObj.ProductCategory.IsLoaded)
    productObj.ProductCategory.Load();

if (!productObj.ProductDetails.IsLoaded)
    productObj.ProductDetails.Load();

//my own methods.
base.Delete(productObj);
base.SaveAllObjectChanges();

但我在ObjectContext.SaveChanges(); I.e。,

上收到错误
  

正在AssociationSet'FK_ProductCategory_Product'添加或删除关系。使用基数约束时,还必须添加或删除相应的“ProductCategory”。

4 个答案:

答案 0 :(得分:7)

感谢您的回复。我已经解决了我的问题。在EDMX中使用相同的级联。 为了解释我正在回答我自己的问题。 :)

我们必须在EDMX文件中分两部分添加<OnDelete Action="Cascade"></OnDelete>

  1. 在SSDL部分
  2. 在CSDL部分

答案 1 :(得分:5)

看看this question
在那里描述了一级关联的情况。如果您正确设置OnDelete操作,则删除所有关联的子对象应该没有问题。

答案 2 :(得分:3)

此外,如果您在visual studio中查看edmx文件,可以选择“关联”并选择“End1 OnDelete”属性并设置为“Cascade”。

答案 3 :(得分:0)

值得注意的是,您需要确保加载对象以便删除它们 - 我打开了Cascade但是在我加载了所需的对象之前它没有帮助(有趣的是我也不需要启用Cascade在我的情况下)。我已经记录了帖子的详细信息,这些信息帮助我追踪详细信息Entity Framework delete child object