亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實體框架和調用context.dispose()

實體框架和調用context.dispose()

什么時候應該調用DbContext.dispose()實體框架?這種假想的方法不好嗎?public static string GetName(string userId){    var context = new DomainDbContext();    var userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId);    context.Dispose();    return userName;}這是否更好?public static string GetName(string userId){    string userName;    using(var context = new DomainDbContext()) {        userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId);        context.Dispose();    }    return userName;}這是否更好,也就是說,在使用using()時不應該調用context.Dispose()嗎?public static string GetName(string userId){    string userName;    using(var context = new DomainDbContext()) {        userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId);    }    return userName;}
查看完整描述

3 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

實際上,這是兩個問題合二為一:

  1. 我應該何時Dispose()上下文?

  2. 我的背景壽命應該是什么?

答案:

  1. 永遠不會 1。using是隱Dispose()在一個try-finally塊中。Dispose較早發生異常時,可能會丟失單獨的語句。此外,在最常見的情況下,不是要求Dispose所有(隱或顯式)是不會對人體有害。

  2. 參見例如Entity Framework 4-Winform應用程序中的上下文壽命/范圍。簡而言之:壽命應該是“短的”,靜態上下文是不好的。


1正如某些人所評論的,該規則的一個例外是,上下文是實現IDisposable自身并共享其生命周期的組件的一部分。在這種情況下,您需要調用組件context.Dispose()Dispose方法。


查看完整回答
反對 回復 2019-11-29
?
DIEA

TA貢獻1820條經驗 獲得超2個贊

我遵循了一些使用EF的很好的教程,但它們沒有處理上下文。


我對此感到有點好奇,我注意到即使是受人尊敬的Microsoft VIP也不會處理上下文。我發現您在正常情況下不必將dbContext處置。



查看完整回答
反對 回復 2019-11-29
?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

您可以將數據庫上下文定義為類字段,然后實施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;

    }

}


查看完整回答
反對 回復 2019-11-29
  • 3 回答
  • 0 關注
  • 920 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號