2014-07-26 199 views
1

我想刪除兩個實體之間的多對多關係條目而不先查詢它們中的任何一個。沿線的東西:實體框架使用存根刪除多對多關係

Foo foo = new Foo() {Id = 1}; 
context.Foos.Attach(foo); 
context.Entry(foo).State = EntityState.Modified; 

Bar bar = new Bar { Id = 2 }; 
context.Bars.Attach(bar); 
context.Entry(bar).State = EntityState.Modified; 

// This doesn't work: no exceptions but the relationship doesn't get deleted 
foo.Bars = new List<Bar> { bar }; 
foo.Bars.Remove(bar); 

context.SaveChanges(); 

如何從foo.Bars關係中刪除欄而不先查詢任何實體?

回答

0

你需要有存根實體是Unchanged和同樣位於Unchanged狀態的關係(foo.Bars = new List<Bar> { bar };後調用AcceptAllChanges)。只有foo.Bars.Remove(bar);將把關係置於Deleted狀態,SaveChanges會將其刪除。您可以通過檢查底層的ObjectContext.ObjectStateManager來驗證發生了什麼 - 它的狀態包含實體和關係的字典。如果你不使用代理,你可能需要DetectChanges

+0

已解決。你的答案几乎是這樣做的方式。我做了一點不同,首先創建POCOS,並在創建List之後運行Attach命令,但最終結果是相同的。在連接時,狀態標記爲未更改,操作成功。謝謝。 – user472875