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的动作暴露给业务层的更多相关文章

  1. 分享:用 NDK C++做底层开发的Android 浏览器,纯免费,无广告

    分享:用 NDK C++做底层开发的Android 浏览器,纯免费,无广告 操作简单,傻瓜一看就会 无毒.无广告.无负作用,完全免费 下载地址1:http://awdjcfeizb.l33.yunpa ...

  2. 复习做UWP时涉及到的几种加密签名相关

    本人菜鸟一枚,大学里凭兴趣学了一点WP的皮毛,后来又幸运(或者不幸)的进了一家专注于Windows生态的公司做了一段时间的UWP.在博客园写点自己遇到的东西,作为分享,也作为自己的备忘,如果有错误的地 ...

  3. MySQL做练习时总结的一些知识点

    MySQL做练习时总结的一些知识点     0:mysql有三种注释方法 上午插入记录的时候一直没有成功,郁闷不知道为什么.因为是很多条记录一起插入,中间一些不用的数据就用"--" ...

  4. 使用C++做算法时,对内存的管理的办法

    使用C++做算法时,对内存的管理的办法 最近老是在想C++的内存控制机制,查了一些资料所以有点想法,自己记录一下免得以后自己忘了. 1. 需求 在做线性代数的算法时,首要的就实现Matrix这个类.由 ...

  5. .net 做工作流时,生成项目后工具箱里有关工作流的东西不显示解决方法

    在做工作流模块时,遇到一个比较棘手的问题,那就是生成项目后工具箱里有关工作流的东西不显示,这个问题令人百思不得其解,经过查阅英文网站,终于找到解决方法: 把项目中的建模项目移除掉,再重新生成,奇迹出现 ...

  6. angular中service封装$http做权限时拦截403等状态及获取验证码倒计时、跨域问题解决

    封装$http.做权限时拦截403等状态及获取验证码倒计时: 拦截接口返回状态 var app = angular.module('app'); app.factory('UserIntercepto ...

  7. 怎样让oracle实验本在不做实验时性能提升——win7下举例

    怎样让oracle实验本在不做实验时性能提升--win7下举例 型号:ThinkPad E431 系统:WIN7 实验使用的笔记本不使用数据库时.建议将oracle关闭,使其释放占用的资源. orac ...

  8. MVC+Spring.NET+NHibernate .NET SSH框架整合 C# 委托异步 和 async /await 两种实现的异步 如何消除点击按钮时周围出现的白线? Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法

    MVC+Spring.NET+NHibernate .NET SSH框架整合   在JAVA中,SSH框架可谓是无人不晓,就和.NET中的MVC框架一样普及.作为一个初学者,可以感受到.NET出了MV ...

  9. 在使用R做数据挖掘时,最常用的数据结构莫过于dataframe了,下面列出几种常见的dataframe的操作方法

    原网址 http://blog.sina.com.cn/s/blog_6bb07f83010152z0.html 在使用R做数据挖掘时,最常用的数据结构莫过于dataframe了,下面列出几种常见的d ...

随机推荐

  1. Cannot delete or update a parent row: a foreign key constraint fails....

    在操作”小弟“这张表时候报错 想在“小弟”上面加入数据或者更新数据,就要听老大的, 这句话后面跟着的表就是“老大”,必须老大有数据索引,“小弟“才可以加入或者更新 查看“小弟”表的外键,会发现有对“老 ...

  2. Coreldraw绘制标准波浪线

    Coreldraw中如何绘制标准波浪线? 先画一根直线,单击工具栏中的“互动式工具组”,选择“互动式变形工具”, 再在弹出的属性栏中选择“拉链变形”,在幅度和频率中分别输入波形的波峰 到波底的值.波浪 ...

  3. iOS第三方语音-微信语音

    网址链接:http://pr.weixin.qq.com/ 里面包含了微信语音和图像,集成很简单,下载方demo后会有个文档,按照流程来(因为它只提供了真机的.a文件,所以只能用真机哦,不然会报错) ...

  4. [BZOJ4207]Can

    [BZOJ4207]Can 试题描述 这个问题是源于一个在棋盘上玩的,由Sid Sackson设计的名叫Can't stop的游戏的.这个问题与Can't stop有一定的相似之处,但是不需要玩过Ca ...

  5. COJ 1208 矩阵快速幂DP

    题目大意: f(i) 是一个斐波那契数列 , 求sum(f(i)^k)的总和 由于n极大,所以考虑矩阵快速幂加速 我们要求解最后的sum[n] 首先我们需要思考 sum[n] = sum[n-1] + ...

  6. 【贪心】codeforces B. Heidi and Library (medium)

    http://codeforces.com/contest/802/problem/B [题意] 有一个图书馆,刚开始没有书,最多可容纳k本书:有n天,每天会有人借一本书,当天归还:如果图书馆有这个本 ...

  7. Codeforces Round #297 (Div. 2) D. Arthur and Walls [ 思维 + bfs ]

    传送门 D. Arthur and Walls time limit per test 2 seconds memory limit per test 512 megabytes input stan ...

  8. python学习之-项目开发目录规范

    软件目录结构规范有什么好处: 通过规范化,能够更好的控制软件结构,让程序具有更高的可读性. 项目目录组织结构如下: Foo/ # 项目名 --bin/ # 可执行文件目录 --foo # 可执行程序 ...

  9. [Bzoj1296][Scoi2009] 粉刷匠 [DP + 分组背包]

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2184  Solved: 1259[Submit][Statu ...

  10. Java面试题总结之JDBC 和Hibernate

    1.100 用户同时来访数据库,要采取什么技术? 答:采用数据库连接池. 2.什么是ORM? 答:对象关系映射(Object—Relational Mapping,简称ORM)是一种为了解决面向对象与 ...