当你使用LINQ做底层时,最好设计一个工厂,不要把LINQ的动作暴露给业务层
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的动作暴露给业务层的更多相关文章
- 分享:用 NDK C++做底层开发的Android 浏览器,纯免费,无广告
分享:用 NDK C++做底层开发的Android 浏览器,纯免费,无广告 操作简单,傻瓜一看就会 无毒.无广告.无负作用,完全免费 下载地址1:http://awdjcfeizb.l33.yunpa ...
- 复习做UWP时涉及到的几种加密签名相关
本人菜鸟一枚,大学里凭兴趣学了一点WP的皮毛,后来又幸运(或者不幸)的进了一家专注于Windows生态的公司做了一段时间的UWP.在博客园写点自己遇到的东西,作为分享,也作为自己的备忘,如果有错误的地 ...
- MySQL做练习时总结的一些知识点
MySQL做练习时总结的一些知识点 0:mysql有三种注释方法 上午插入记录的时候一直没有成功,郁闷不知道为什么.因为是很多条记录一起插入,中间一些不用的数据就用"--" ...
- 使用C++做算法时,对内存的管理的办法
使用C++做算法时,对内存的管理的办法 最近老是在想C++的内存控制机制,查了一些资料所以有点想法,自己记录一下免得以后自己忘了. 1. 需求 在做线性代数的算法时,首要的就实现Matrix这个类.由 ...
- .net 做工作流时,生成项目后工具箱里有关工作流的东西不显示解决方法
在做工作流模块时,遇到一个比较棘手的问题,那就是生成项目后工具箱里有关工作流的东西不显示,这个问题令人百思不得其解,经过查阅英文网站,终于找到解决方法: 把项目中的建模项目移除掉,再重新生成,奇迹出现 ...
- angular中service封装$http做权限时拦截403等状态及获取验证码倒计时、跨域问题解决
封装$http.做权限时拦截403等状态及获取验证码倒计时: 拦截接口返回状态 var app = angular.module('app'); app.factory('UserIntercepto ...
- 怎样让oracle实验本在不做实验时性能提升——win7下举例
怎样让oracle实验本在不做实验时性能提升--win7下举例 型号:ThinkPad E431 系统:WIN7 实验使用的笔记本不使用数据库时.建议将oracle关闭,使其释放占用的资源. orac ...
- 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 ...
- 在使用R做数据挖掘时,最常用的数据结构莫过于dataframe了,下面列出几种常见的dataframe的操作方法
原网址 http://blog.sina.com.cn/s/blog_6bb07f83010152z0.html 在使用R做数据挖掘时,最常用的数据结构莫过于dataframe了,下面列出几种常见的d ...
随机推荐
- 数据结构实验6:C++实现二叉树类
实验6 学号: 姓名: 专业: 6.1 实验目的 掌握二叉树的动态链表存储结构及表示. 掌握二叉树的三种遍历算法(递归和非递归两类). 运用二叉树三种遍历的方法求解有关问题. 6 ...
- Mac OS X 上如何切换默认的 Python 版本?
- pycharm运行没问题,但是在命令行执行就报错
因为python并不知道你那个叫demo的package在哪里.你需要手动把project的完整路径添加到PYTHONPATH这个环境变量中.pycharm执行项目中的文件时会自动帮你做这件事,所以你 ...
- jenkins 提示No emails were triggered
发送邮件 Jenkins->系统管理->系统设置,在“邮件通知”里设置smtp服务器地址,以及发送者邮箱地址,在具体的任务构建完成以后,可以设置发送邮件,在某一个任务的"Add ...
- You Are the One (区间DP)
The TV shows such as You Are the One has been very popular. In order to meet the need of boys who ar ...
- 【ITOO 3】.NET 动态建库建表:实用EF框架提供的codeFirst实现动态建库
导读:在上篇博客中,介绍了使用SQL字符拼接的方式,实现动态建库建表的方法.这样做虽然也能够实现效果,但是,太麻烦,而且,如果改动表结构,字段的话,会对代码修改很多.但是EF给我们提供了一种代码先行的 ...
- POJ2014 Flow Layout
Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3161 Accepted: 2199 Description A f ...
- 莫队乱搞--BZOJ2038: [2009国家集训队]小Z的袜子(hose)
$n \leq 50000$的$\leq 50000$的数字序列,$m \leq 50000$个询问,每次问一个区间中随机拿两次(不放回)拿到相同数字的概率,以既约分数形式输出. 莫队入门.把询问按“ ...
- php 之mysql安全
php 之mysql安全 原文:https://www.cnblogs.com/mafeng/p/5939329.html. 请浏览原文. 一.服务器配置方面. (1) 打开php的安全模式 php的 ...
- python之-- 反射
反射定义:通过字符串映射或者修改程序运行时的状态,属性,方法.方法有如下4个:1:getattr(object,name,default=None):根据字符串去获取obj对象里的对应的方法的内存地址 ...