zoukankan      html  css  js  c++  java
  • dbcontext实例创建问题

    dbcontext初始化

    Private DemoContext db=new DemoContext ();
    

    问题:什么时候释放db对象?

    使用Using()方法中创建,每次调用会造成频繁的连接关闭数据库

    可能会想到对象全局唯一使用单例模式,倘若多个用户操作的时候就是操作同一个数据库,所以必须是线程内全局唯一

    解决:MVC中,把EF对象放入到一个线程中,新建一个Base控制器,作为其他控制器基类

    添加命名空间引用:

    using System.Runtime.Remoting.Messaging;
    

    控制器代码:

    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:是类似于方法调用的线程本地存储区的专用集合对象,并提供对每个逻辑执行线程都唯一的数据槽。数据槽不在其他逻辑线程上的调用上下文之间共享

    HttpContext:不同用户的请求,服务器都会创建一个新的HttpContext实例,直到请求结束为止,服务器就会销毁这个实例。

  • 相关阅读:
    SendInput模拟键盘输入的问题 <转>
    tinyMce3.21 使用随笔
    ORM的一些思考
    VS2008 , 1330 , 数字签名错误.
    .Net Reflector 工具 过期后使用小工具。
    就当是一个新的设计模式!
    OpenSUSE 11 下 Mono 2 开发笔记。
    转:)CNBlogs引用第三方组(控)件明细^_^
    DBLinq ,没实现 Log !
    DotNet 的一些知识点
  • 原文地址:https://www.cnblogs.com/qiuguochao/p/6864537.html
Copyright © 2011-2022 走看看