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