zoukankan      html  css  js  c++  java
  • 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;
                }
            }
        }
    }

  • 相关阅读:
    PHP+MySQL实现海量数据导入导出的总结:is_numbric函数的坑
    【PHP开发规范】继承与扩展:PSR-2 编码风格规范
    【PHP开发规范】老生常谈的编码开发规范你懂多少?
    【PHP面试题】通俗易懂的两个面试必问的排序算法讲解:冒泡排序和快速排序
    php数组函数array_column:不用循环就能提取多维数组内容
    php使用urlencode对中文编码而引出的问题:urlencode和rawurlencode的区别
    table-tree vs stock vs whiteboard
    PDF解析
    山灵up4
    Devops之CI/CD
  • 原文地址:https://www.cnblogs.com/lori/p/2241025.html
Copyright © 2011-2022 走看看