您的位置:首页 > 其它

当你使用LINQ做底层时,最好设计一个工厂,不要把LINQ的动作暴露给业务层

2011-07-28 22:41 465 查看
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:     /// <summary>

11:     /// LINQ数据库连接对象制造工厂

12:     /// </summary>

13:     static internal class DataContextFactory

14:     {

15:

16:         static System.Timers.Timer sysTimer = new System.Timers.Timer(10000);

17:

18:         volatile static Dictionary<Thread, DataContext[]> divDataContext = new Dictionary<Thread, DataContext[]>();

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:             List<Thread> list = new List<Thread>();

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:         /// <summary>

49:         /// 通过工厂的制造模式获取相应的LINQ数据库连接对象

50:         /// </summary>

51:         /// <param name="dbName">数据库名称(需要与真实数据库名称保持一致)</param>

52:         /// <returns>LINQ数据库连接对象</returns>

53:         public static DataContext Intance(string dbName)

54:         {

55:             return Intance(dbName, Thread.CurrentThread);

56:         }

57:         /// <summary>

58:         /// 通过工厂的制造模式获取相应的LINQ数据库连接对象

59:         /// </summary>

60:         /// <param name="dbName">数据库名称(需要与真实数据库名称保持一致)</param>

61:         /// <param name="thread">当前线程引用的对象</param>

62:         /// <returns>LINQ数据库连接对象</returns>

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:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐