zoukankan      html  css  js  c++  java
  • 使用chole创建一个连接池

    using Chloe;
    using Chloe.Infrastructure;
    using Chloe.SqlServer;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Services
    {
        /// <summary>
        /// 数据库连接管理类
        /// </summary>
       public class DBconnectionManagement
        {
    
            public DBconnectionManagement() {
                aconnList = new List<DbObject>();
                aLock = new object();
            }
    
            private List<DbObject> aconnList { get; set; }
    
    
            /// <summary>
            /// 获去一个新的连接
            /// </summary>
            /// <returns></returns>
            private MyDbContext getNewconn()
            {
                return new MyDbContext("data source=119.29.21.XXX;initial catalog=XXX;user id=XX;password=XXX");
            }
    
            /// <summary>
            /// 新增一个连接到队列中
            /// </summary>
            private void Addconn() {
                aconnList.Add(new DbObject(getNewconn()));
                Console.WriteLine("新增了一个连接对象 目前" + aconnList.Count);
            }
    
            int getCount = 0;
            object aLock { get; set; }
            /// <summary>
            /// 获取一个连接对象
            /// </summary>
            public IDbContext Getconn()
            {
                Console.WriteLine("获取一次 第"+ ++getCount);
                IDbContext result;
                lock (aLock)
                {
                    result = aconnList.Where(d => d.IsUse == false).Select(d => d.Conn).FirstOrDefault();
                }
                if (result == null)
                {
                    Addconn();
                    return Getconn();
                }
                return result;
            }
        }
        /// <summary>
        /// 存放DB对象
        /// </summary>
        public class DbObject {
            private DbObject() { }
            
            public DbObject(MyDbContext conn) {
                conn.ABackOffFunc += BackOffFunc;
                this.Conn = conn;
                this.IsUse = false;
            }
            /// <summary>
            /// 连接对象
            /// </summary>
            private MyDbContext conn { get; set; }
    
            /// <summary>
            /// 连接对象
            /// </summary>
            public MyDbContext Conn { get { IsUse = true;return conn;  } set { conn = value; } }
    
            /// <summary>
            /// 是否真正被使用
            /// </summary>
            public bool IsUse { get; set; }
    
            /// <summary>
            /// 销毁时候的回掉函数
            /// </summary>
            public Action<DbObject> AFuncComplete;
    
    
            private void BackOffFunc(MyDbContext conn) {
                AFuncComplete?.Invoke(this);
                IsUse = false;
            }
    
        }
        /// <summary>
        /// 重写的连接对象
        /// </summary>
        public class MyDbContext : MsSqlContext, IDisposable {
    
            public MyDbContext(string connString):base(connString) {
    
            }
            public MyDbContext(IDbConnectionFactory dbConnectionFactory) : base(dbConnectionFactory) {
    
            }
            public new void Dispose()
            {
                ABackOffFunc.Invoke(this);
               
            }
            /// <summary>
            /// 真实销毁函数
            /// </summary>
            public void Close() {
                //如果不执行此操作将会一直保持连接  可以使用定时器销毁对象
                 base.Dispose();
            }
    
            /// <summary>
            /// 销毁时候的回掉函数
            /// </summary>
            public Action<MyDbContext> ABackOffFunc;
        }
    }
    

      

  • 相关阅读:
    VC++使用socket进行TCP、UDP通信实例总结
    [Android Pro] 调用系统相机和图库,裁剪图片
    [Android Pro] 查看 keystore文件的签名信息 和 检查apk文件中的签名信息
    [Android 新特性] 谷歌发布Android Studio开发工具1.0正式版(组图) 2014-12-09 09:35:40
    [Android 新特性] 有史来最大改变 Android 5.0十大新特性
    [Android Pro] service中显示一个dialog 或者通过windowmanage显示view
    [Android Pro] 通过Android trace文件分析死锁ANR
    [Android Memory] Android 的 StrictMode
    [Android Memory] Android性能测试小工具Emmagee
    [Android Memory] Android内存管理、监测剖析
  • 原文地址:https://www.cnblogs.com/AnAng/p/9291716.html
Copyright © 2011-2022 走看看