2013-01-09 23 views
0

什麼是創造每筆交易新DbContext之間的區別:一對多重`DbContext`?

using (var context = new MyDbContext()) { /* transaction */ } 

,並使用一個在整個應用程序

var context = MyDbContext.Singleton; 
*/ transaction */ 

回答

2

一(第一)是這樣做的正確方法。

另一種是不正確的做法。

實體框架被設計爲具有短暫的上下文。它不會在運行時進行內存管理或清理,而只是繼續增長並在內存中存在的時間越長。它被設計成在每次使用後處置掉。如果您以第二種方式使用它,則代碼會被破壞。

如果你正在開發一個網絡應用程序,它更糟糕。第二種方法可能會導致數據損壞,因爲上下文在所有用戶之間共享,並且多個用戶同時嘗試攻擊它的狀態會被破壞。

+0

「'實體框架被設計爲具有短暫的上下文,它不會進行內存管理或清理」 - 您能否詳細說明? –

+0

@CalebJares - 不知道有什麼要詳細說明的。它不會在運行時清除它的內存。它的緩存增長直到你用完內存。它被設計成在每次使用後處置掉。 –