.net EntityFramework dbContext 如何實例化


1

.DbContext怎么在Asp.mvc中使如何實例化

public class Repository
  {
      //實例化EF容器:有弊端。一個線程里可能會創建多個DbContext
      //DbContext db = new DbContext();
 
      //改造:保證一個請求線程中只有一份EF容器(你要明白:一個url請求到服務器,IIS就開一個線程去處理)
      protected DbContext GetDbContext
      {
          get
          {
              //向線程緩存中查詢,如果返回的是null,則創建,同時存入到這個線程緩存中
              //注意的是線程緩存CallContext,而不是我們熟悉的HttpRuntime.cache。意味着這個DbContext對象在這個線程內能被其他方法共享。
              object efDbContext = CallContext.GetData("DbContext");
              if (efDbContext == null)
              {
                  efDbContext = new DbContext();
                  //存入到這個線程緩存中
                  CallContext.SetData("DbContext", efDbContext);
              }
              return efDbContext as DbContext;
          }
      }
}

2.為什么你要using 或dispose掉DbContext ?

是擔心數據庫連接沒有釋放?還是擔心DbContext占用過多資源呢?
首先擔心數據庫連接沒有釋放肯定是多余的,因為DbContext在SaveChanges完成后會釋放掉打開的數據庫連接。
可以反編譯一下SaveChages的源碼。
擔心DbContext占用過多資源也是多余的,有GC回收。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM