3 回答

TA貢獻1875條經(jīng)驗 獲得超5個贊
實際上,這是兩個問題合二為一:
我應(yīng)該何時
Dispose()
上下文?我的背景壽命應(yīng)該是什么?
答案:
永遠(yuǎn)不會 1。
using
是隱Dispose()
在一個try-finally
塊中。Dispose
較早發(fā)生異常時,可能會丟失單獨的語句。此外,在最常見的情況下,不是要求Dispose
所有(隱或顯式)是不會對人體有害。參見例如Entity Framework 4-Winform應(yīng)用程序中的上下文壽命/范圍。簡而言之:壽命應(yīng)該是“短的”,靜態(tài)上下文是不好的。
1正如某些人所評論的,該規(guī)則的一個例外是,上下文是實現(xiàn)IDisposable
自身并共享其生命周期的組件的一部分。在這種情況下,您需要調(diào)用組件context.Dispose()
的Dispose
方法。

TA貢獻1820條經(jīng)驗 獲得超2個贊
我遵循了一些使用EF的很好的教程,但它們沒有處理上下文。
我對此感到有點好奇,我注意到即使是受人尊敬的Microsoft VIP也不會處理上下文。我發(fā)現(xiàn)您在正常情況下不必將dbContext處置。

TA貢獻1801條經(jīng)驗 獲得超8個贊
您可以將數(shù)據(jù)庫上下文定義為類字段,然后實施IDisposable。如下所示:
public class MyCoolDBManager : IDisposable
{
// Define the context here.
private DomainDbContext _db;
// Constructor.
public MyCoolDBManager()
{
// Create a new instance of the context.
_db = new DomainDbContext();
}
// Your method.
public string GetName(string userId)
{
string userName = _db.UserNameItems.FirstOrDefault(x => x.UserId == userId);
return userName;
}
// Implement dispose method.
// NOTE: It is better to follow the Dispose pattern.
public void Dispose()
{
_db.dispose();
_db = null;
}
}
添加回答
舉報