zoukankan      html  css  js  c++  java
  • CSLA中的连接管理器ConnectionManager

    CSLA中实现了嵌套数据库连接时,使用一个数据库连接,看实例:

    代码
     1 private string _conn = "连接字符串";
     2 private void InsertA()
     3 {
     4     using (var ctx = ConnectionManager<SqlConnection>.GetManager(_conn, false))
     5     {
     6         using (var cm = ctx.Connection.CreateCommand())
     7         {
     8             cm.CommandType = CommandType.Text;
     9             cm.CommandText = "insert into a values('01')";
    10             cm.ExecuteNonQuery();
    11         }
    12         InsertB();
    13     }
    14 }
    15 
    16 private void InsertB()
    17 {
    18     using (var ctx = ConnectionManager<SqlConnection>.GetManager(_conn, false))
    19     {
    20         using (var cm = ctx.Connection.CreateCommand())
    21         {
    22             cm.CommandType = CommandType.Text;
    23             cm.CommandText = "insert into b values('02')";
    24             cm.ExecuteNonQuery();
    25         }
    26     }
    27 }

     其中InsertB方法中创建连接时,会使用InsertA中创建的连接。

     实现原理:

    1、在InsertA中创建连接mgr(连接变量名),在本地上下文LocalContext中保存此连接字符串,并且有个计数器mRefCount++为1,

    2、在InsertB中创建连接时,在LocalContext中发现有此连接字符串,则使用忆存在的连接mgr,计数器mRefCount++为2。

    3、在InsertB中Using块结束时,计数器mRefCount--为1

    4、在InsertA中Using块结束时,计数器mRefCount--为0,销毁数据库连接,LocalContext中移除连接字符串。

  • 相关阅读:
    cygwin补充安装gcc/g++的方法
    JS中获取request的值,非常好用的JS代码
    登录页面跳出框架的JS
    asp.net DataTable转JSON
    ASP.NET文件下载的实用方法
    史上最牛X到的身份证号码验证,测试误差为0
    nopcommerce插件深度剖析
    C# foreach,linq,delegate集合查询的性能比较
    jquery tab插件精简版
    建议博客园成立中国的开源项目组织,同意的顶起
  • 原文地址:https://www.cnblogs.com/brawei/p/1907643.html
Copyright © 2011-2022 走看看