博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
当你使用LINQ做底层时,最好设计一个工厂,不要把LINQ的动作暴露给业务层
阅读量:6714 次
发布时间:2019-06-25

本文共 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 Dictionary
divDataContext = 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:             List
list = 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:

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
mysql的基本原理
查看>>
《面向对象分析与设计》——抽象
查看>>
linux学习记录-------jdk安装配置
查看>>
查看dll依赖项
查看>>
koa和egg项目webpack热更新实现
查看>>
ansible普通用户su切换问题
查看>>
2017.10.1
查看>>
洛谷——P1187 3D模型
查看>>
温度传感器,ds18b20
查看>>
ecshop为什么删不掉商品分类
查看>>
bzoj1941[Sdoi2010]Hide and Seek
查看>>
IT兄弟连 Java Web教程 经典面试题2
查看>>
利用setTimeoutc处理javascript ajax请求超时
查看>>
三、Java基础工具(1)_常用类——字符串
查看>>
文献管理与信息分析》第二讲作业
查看>>
java 遍历arrayList的四种方法
查看>>
根据不同的产品id获得不同的下拉选项 (option传多值)
查看>>
css3新增属性:多列(column)
查看>>
redis 主从配置和集群配置
查看>>
手机3D游戏开发:自定义Joystick的相关设置和脚本源码
查看>>