從EF

2016-06-22 59 views
0

我試圖刪除EF對象圖刪除複雜的對象圖,但一切我嘗試拋出一個錯誤:從EF

var dbSet = _context.Set(typeof (MyObject)); 
     dbSet.Remove(entity); 
     _context.SaveChanges(); 

當我做到這一點,它說我的對象不存在中ObjectManager。

因此,然後我讀我需要先附加它。所以,我試試這個:

var dbSet = _context.Set(typeof (MyObject)); 
     dbSet.Attach(entity); 
     dbSet.Remove(entity); 
     _context.SaveChanges(); 

但其一部分期間炸燬說安裝失敗,失敗的原因是同一類型的另一實體已經有相同的主鍵值。

我在這裏錯過了什麼?

+0

你在這裏顯示的代碼之前發生了什麼'_context'?它的壽命是多少? –

+0

它是在我的UnitOfWork類的ctor中創建的。每次調用插入新記錄或更新時創建並處理該類。 –

+0

這是你所做的一切嗎? –

回答

1

如果您已經使用了相同的情況下,那麼爲什麼不乾脆用

_context.MyObject.Remove(entity); 

的實體必須是從同一個context實例爲您使用刪除(在一個源中檢索你的實體從數據庫除非你連接/分離)。

或者做類似:

_context.MyObject.Remove(_context.MyObject.Find(id)); 
_context.SaveChanges(); 

此外,雖然這不是你的問題是什麼,你需要管理的級聯刪除其中數據庫約束存在。除非你有你的數據庫設置來管理你的級聯刪除。

0

我最終爲此使用了GraphDiff。它運作良好。