删除对象及其相关实体
有谁知道如何删除对象及其所有相关实体。
例如,我有表,Products,Category,ProductCategory和productDetails,productCategory正在连接Product和Category的表。
我从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();
上收到错误ObjectContext.SaveChanges();
也就是说,
正在从
AssociationSet
‘添加或删除关系。 使用基数约束时,还必须添加或删除相应的“ProductCategory”。
谢谢回复。 我已经解决了我的问题。 在EDMX中使用相同的级联。 为了解释,我正在回答我自己的问题。 🙂
我们必须在EDMX文件中分两部分添加
- 在SSDL部分
- 在CSDL部分
看看这个问题 。
在那里描述了一级关联的情况。 如果您正确设置OnDelete操作,则删除所有关联的子对象应该没有问题。
此外,如果您在visual studio中查看edmx文件,可以选择“关联”并选择“End1 OnDelete”属性并设置为“Cascade”。
值得注意的是,您需要确保加载对象以便删除它们 – 我启用了Cascade但是在我加载了所需的对象之前它没有帮助(有趣的是,我也根本不需要打开Cascade我的情况)。 我已经记录了post的详细信息,这些信息帮助我最大程度地追踪了Entity Framework删除子对象的细节