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回收。