dbcontext初始化數據庫
Private DemoContext db=new DemoContext ();
問題:何時釋放db對象?服務器
使用Using()方法中建立,每次調用會形成頻繁的鏈接關閉數據庫spa
可能會想到對象全局惟一使用單例模式,假若多個用戶操做的時候就是操做同一個數據庫,因此必須是線程內全局惟一線程
解決:MVC中,把EF對象放入到一個線程中,新建一個Base控制器,做爲其餘控制器基類code
添加命名空間引用:對象
using System.Runtime.Remoting.Messaging;
控制器代碼:blog
public class BaseController : Controller { //方式一 public DBContext db { get { //從當前線程中獲取 DBContext對象 DBContext db = CallContext.GetData("DB") as DBContext; if (db == null) { db = new DBContext(); //放入數據槽,來使線程內惟一 CallContext.SetData("DB", db); } return db; } } //方式二 public DBContext DB2 { get { DBContext db = null; if (HttpContext.Items["db1"] == null) { db = new DBContext(); HttpContext.Items["db1"] = db; } else { db = HttpContext.Items["db1"] as DBContext; } return db; } } }
CallContext:是相似於方法調用的線程本地存儲區的專用集合對象,並提供對每一個邏輯執行線程都惟一的數據槽。數據槽不在其餘邏輯線程上的調用上下文之間共享get
HttpContext:不一樣用戶的請求,服務器都會建立一個新的HttpContext實例,直到請求結束爲止,服務器就會銷燬這個實例。class