dbcontext實例建立問題

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

相關文章
相關標籤/搜索