当你使用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:
相关文章推荐
- 当你使用LINQ做底层时,最好设计一个工厂,不要把LINQ的动作暴露给业务层
- Moon一个无视Linq,无视实体类的设计思路.(不要错过,看了之后, 让我们从此以后不再羡慕linq to entiy!)
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Java中,尽量相信自己,使用自己写的方法,不要使用底层提供的方法。都是坑。
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 综合应用WPF/WCF/WF/LINQ之二十四:使用UserControl技术编写一个翻页控件
- 使用VSS签入项目,最好不要把bin下的dll放在vss控制之下
- HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo
- 同一个变量别重复使用,状态码最好设置全局变量
- Java设计模式编程中简单工厂与抽象工厂模式的使用实例
- 一个Demo理解工厂设计模式
- 三通道阈值化最好不要使用img_h<0.45&img_s>0.15&img_v>0.25的写法~
- 一个基于封装CSLA框架后,设计业务类的例子:User
- 使用silverlight构建一个工作流设计器(十六)-持久化数据到数据库—数据库结构
- c#学习笔记之九 事件(event)的使用,一个简单的例子揭示其设计理念
- 设计模式笔记1 - 简单工厂 和 工厂模式理解以及使用
- hibernate 字段名最好不要使用数据库的保留字
- 一个基于封装CSLA框架后,设计业务类的例子:users .
- 关于[一个基于WF的业务流程平台]表设计的说明
- 在使用CompareValidator对于日期进行验证的时候,最好多一个对于日期格式的验证