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;
            }
        }
    }
}

http://www.cnblogs.com/lori/archive/2011/11/08/2241025.html

最新文章

  1. [Erlang 0111] Erlang Abstract Format , Part 2
  2. (转)Singleton 单例模式(懒汉方式和饿汉方式)
  3. HTTP02--Http请求头及缓存知识
  4. [wikioi 1034][CTSC 1999]家园(网络流)
  5. MVC中Linq to sql创建数据模型
  6. maven入门
  7. Linux内核分析(六)----字符设备控制方法实现|揭秘系统调用本质
  8. stm32 RAM分配及占有(转)
  9. MurMurHash3
  10. axis2 和 xfire 接口调用问题排查
  11. 判断网站URL是否正常访问脚本
  12. 10个优秀个android项目,精选|快速开发
  13. this对象指向
  14. Gitlab_ansible_jenkins三剑客①搭建gitlab的详细步骤
  15. main函数如何调用文件外的函数
  16. jQuery EasyUI一个基于 jQuery 的框架(创建网页所需的一切)
  17. python基础之 基本数据类型,str方法和for循环
  18. 【java】进制转换
  19. c++ map 官方样例
  20. 每天一个linux命令(6) ar命令

热门文章

  1. 批处理学习笔记6 - 重定向符&gt;和&gt;&gt;
  2. 微信H5支付.NET版本备忘
  3. 【Android】20.3 拍照和视频录制
  4. UnityTestTools測试工具
  5. Oracle PLSQL Demo - 29.01.Function结构模板 [无入参] [有返回]
  6. Oracle PLSQL Demo - 24.分隔字符串function
  7. c++之——虚析构函数
  8. python学习笔记(17)--eclipse和pydev的安装及汉化
  9. Maven学习之(四)Maven插件创建web项目
  10. 【Unity】同时打开多个项目工程