• MVC+LINQToSQL的Repository模式之(一)数据工厂


    namespace Data
    {
        /// <summary>
        /// 数据库建立工厂
        /// Created By : 张占岭
        /// Created Date:2011-10-14
        /// Modify By:
        /// Modify Date:
        /// Modify Reason:
        /// </summary>
        internal static class DbFactory
        {
            static System.Timers.Timer sysTimer = new System.Timers.Timer(10000);
            volatile static Dictionary<Thread, DataContext[]> divDataContext = new Dictionary<Thread, DataContext[]>();
            static DbFactory()
            {
                sysTimer.AutoReset = true;
                sysTimer.Enabled = true;
                sysTimer.Elapsed += new System.Timers.ElapsedEventHandler(sysTimer_Elapsed);
                sysTimer.Start();
            }

            static void sysTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                List<Thread> list = new List<Thread>();
                foreach (Thread item in divDataContext.Keys)
                {
                    if (item.ThreadState == ThreadState.Stopped)
                    {
                        list.Add(item);
                    }
                }
                for (int index = 0; index < list.Count; index++)
                {
                    for (int refer = 0; refer < divDataContext[list[index]].Length; refer++)
                    {
                        if (divDataContext[list[index]][refer] != null)
                        {
                            divDataContext[list[index]][refer].Dispose();
                            divDataContext[list[index]][refer] = null;
                        }
                    }
                    divDataContext.Remove(list[index]);
                    list[index] = null;
                }
                list = null;
            }

            /// <summary>
            /// 通过工厂的制造模式获取相应的LINQ数据库连接对象
            /// </summary>
            /// <param name="dbName">数据库名称(需要与真实数据库名称保持一致)</param>
            /// <returns>LINQ数据库连接对象</returns>
            public static DataContext Intance(string dbName)
            {
                return Intance(dbName, Thread.CurrentThread);
            }

            /// <summary>
            /// 通过工厂的制造模式获取相应的LINQ数据库连接对象
            /// </summary>
            /// <param name="dbName">数据库名称(需要与真实数据库名称保持一致)</param>
            /// <param name="thread">当前线程引用的对象</param>
            /// <returns>LINQ数据库连接对象</returns>
            public static DataContext Intance(string dbName, Thread thread)
            {

                if (!divDataContext.Keys.Contains(thread))
                {
                    divDataContext.Add(thread, new DataContext[2]);
                }

                if (dbName.Equals("TEST"))
                {
                    if (divDataContext[thread][0] == null)
                    {
                        divDataContext[thread][0] = new Entity.TEST.LinqTESTDataContext();
                    }
                    return divDataContext[thread][0];
                }

                if (dbName.Equals("EEE114"))
                {
                    if (divDataContext[thread][1] == null)
                    {
                        divDataContext[thread][1] = new Entity.EEE114.LinqEEE114DataContext();
                    }
                    return divDataContext[thread][1];
                }

                else
                {
                    return null;
                }
            }
        }
    }

  • 相关阅读:
    mac 配置pycharm(2021.3版本) 和 clion(2019.3版本)
    深度学习神经网络backbone
    Windows获取CPU、内存和磁盘使用率脚本
    Unicode编码转换
    @ControllerAdvice全局数据预处理
    查看Linux系统内存、CPU、磁盘使用率和详细信息
    服务器nginx配置SSL证书后启动报错问题解决方案
    Inno Setup 寻找 AppId 的方法
    慢sql_查询条件加了函数导致索引失效
    k8s暂停一个pod
  • 原文地址:https://www.cnblogs.com/lori/p/2241025.html
Copyright © 2020-2023  润新知