0
在我的應用程序中,我們爲每個HTTP請求獲取我們的DbContext
的新實例。在正常的工作流程,我們創建一個實體,並開始填充它部分的導航性能:我如何讓Entity Framework與我分離的對象圖一起工作?
// Request 1
var foo = new Foo();
SessionStore.Add("Foo", foo);
// Request 2
var bar = BarDataService.GetBar(barId);
var foo = SessionStore.Get<Foo>("Foo");
foo.Bars.Add(bar);
// Request 3
var baz = BazDataService.GetBaz(bazId);
var foo = SessionStore.Get<Foo>("Foo");
foo.Baz = baz;
一旦對象圖被完全填充,我們插入實體到數據庫:
var foo = SessionStore.Get<Foo>("Foo");
FooDataService.Add(foo); // BOOM!
的添加通常只是增加了實體到DbSet
,然後調用保存更改:
Set.Add(entity);
Context.SaveChanges();
顯然,這由於失敗的事實,foo
對象包含多個代理對象,每個代理對象都連接到不同的DbContexts
。我們決定在是分離的對象,我們是接受的解決方案:對於事實,這現在創建Bar
和Baz
對象的新實例
// Request 2 (modified)
var bar = BarDataService.GetBar(barId);
BarDataService.Detach(bar);
foo.Bars.Add(bar);
// Similar code for Request 3
var foo = SessionStore.Get<Foo>("Foo");
FooDataService.Add(foo); // Works
這工作,除。
我在這裏做錯了什麼?