2010-03-18 140 views
2

有誰知道如何刪除一個對象及其所有相關實體。刪除對象及其相關實體

例如,我有表,產品,類別,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();即得到一個錯誤,被添加或從AssociationSet 'FK_ProductCategory_Product' 刪除

的關係。由於基數限制,還必須添加或刪除相應的「ProductCategory」。

回答

7

感謝您的回覆。我已經解決了我的問題。在EDMX中使用相同的級聯。 爲了解釋我回答我自己的問題。 :)

我們必須在EDMX文件的兩個部分

  1. 在SSDL部分
  2. 在CSDL部分添加<OnDelete Action="Cascade"></OnDelete>
5

看看this question
描述了一級關聯的情況。如果您正確設置了OnDelete操作,則應該沒有問題來刪除所有關聯的子對象。

+0

這通常是正確的(+1),但如果你這樣做,你應該真的有一個數據庫級聯。 – 2010-03-18 13:41:16

3

而且,如果你看一下在Visual Studio中的EDMX文件,您可以選擇「關聯」並選擇「End1 OnDelete」屬性並設置爲「級聯」。

0

值得注意的是,你需要確保對象被加載,以便它們被刪除 - 我打開了Cascade,但它沒有幫助,直到我有所需的對象加載(有趣的是,我也不需要Cascade轉向在我的情況下)。我記錄了這個帖子的詳細信息,幫助我追蹤細節Entity Framework delete child object