本文共 2757 字,大约阅读时间需要 9 分钟。
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Data.Linq;
6: using System.Threading;
7:
8: namespace Data
9: {
10: ///
11: /// LINQ数据库连接对象制造工厂
12: ///
13: static internal class DataContextFactory
14: {
15:
16: static System.Timers.Timer sysTimer = new System.Timers.Timer(10000);
17:
18: volatile static DictionarydivDataContext = new Dictionary ();
19:
20: static public int DataContextCount { get { return divDataContext.Count; } }
21:
22: static DataContextFactory()
23: {
24: sysTimer.AutoReset = true;
25: sysTimer.Enabled = true;
26: sysTimer.Elapsed += new System.Timers.ElapsedEventHandler(sysTimer_Elapsed);
27: sysTimer.Start();
28: }
29:
30: static void sysTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
31: {
32: Listlist = new List ();
33: foreach (Thread item in divDataContext.Keys)
34: {
35: if (item.ThreadState == ThreadState.Stopped)
36: {
37: list.Add(item);
38: }
39: }
40: for (int index = 0; index < list.Count; index++)
41: {
42: divDataContext.Remove(list[index]);
43: list[index] = null;
44: }
45: list = null;
46: }
47:
48: ///
49: /// 通过工厂的制造模式获取相应的LINQ数据库连接对象
50: ///
51: /// 数据库名称(需要与真实数据库名称保持一致)
52: ///LINQ数据库连接对象
53: public static DataContext Intance(string dbName)
54: {
55: return Intance(dbName, Thread.CurrentThread);
56: }
57: ///
58: /// 通过工厂的制造模式获取相应的LINQ数据库连接对象
59: ///
60: /// 数据库名称(需要与真实数据库名称保持一致)
61: /// 当前线程引用的对象
62: ///LINQ数据库连接对象
63: public static DataContext Intance(string dbName, Thread thread)
64: {
65: if (!divDataContext.Keys.Contains(thread))
66: {
67: divDataContext.Add(thread, new DataContext[4]);
68: }
69: if (dbName.Equals("zzl"))
70: {
71: if (divDataContext[thread][0] == null)
72: {
73: divDataContext[thread][0] = new Data.LinqzzlDataContext();
74: }
75: return divDataContext[thread][0];
76: }
77: else
78: {
79: return null;
80: }
81: }
82:
83:
84:
85: }
86: }
87:
本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。