3 回答

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

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

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以將數(shù)據(jù)庫(kù)上下文定義為類(lèi)字段,然后實(shí)施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;
}
}
添加回答
舉報(bào)