当你使用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的动作暴露给业务层,如需转载请自行联系原博主。

时间: 2024-10-03 21:36:25

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

做SEO时Nofollow的一个误区和巧妙用处

在正式进入主题前,先简单介绍下这个nofollow怎么使用,相信还有部分做SEO的朋友对这个标签的使用不太了解的: a target="blank" href="ABC" rel="nofollow" >XXX 具体用处是什么呢?在写本文之前,我的理解跟很多人一样,加入nofollow标签是为了控制权重,即不让所在页面的权重传递给目标页面,这样一来,就相对地增加了传递给其他页面的权重. 这种观念从我在温州网络公司做SEO时,就一直深埋在我脑

刚建完站的朋友做seo时不该贸然选择关键词

摘要: 刚建完站的朋友面对开始要做seo时容易犯一个最大的错误就是贸贸然的随便选一个关键词,这会导致两种结果:一是自己要做的关键词排名怎么也做不上去,二是把自己认为不错的关键 刚建完站的朋友面对开始要做seo时容易犯一个最大的错误就是贸贸然的随便选一个关键词,这会导致两种结果:一是自己要做的关键词排名怎么也做不上去,二是把自己认为不错的关键词做到第一后发现没什么流量.咱们先来谈谈为什么要做关键词.确定关键词的意义归纳为如下几点: 1.保证关键词有人搜索 对 seo没有概念的人对选择关键词首先会想

浅谈做SEO时应该要看的几个数据

做SEO时需要重视以下的几个数据: 1. 有多少人是经由搜索引擎来进入您的网站.这是最基本也是最重要的数据.若要更详细的话,我们最好能知道每个访客是由哪一个搜索引擎.透过哪一个关键词.以及从哪一个网页进入您的网站.当您第一次做这个分析时,一定会发现访客进入您网站的管道跟您原本的想法会有很大的出入. 如何找出这数据: 如果您能够有网站主机的浏览记录,那是最好的,因为这些信息都包括在浏览记录中.您可以自己写程序来分析,或是运用一些市面上的网络使用分析工具.若您无法得到这个信息(例如您想要看的是您的无

seo做链轮时需要注意的5个细节

做seo链轮需要谨慎行事,稍有差池,可能就被搜索引擎打入十八层地狱,永不翻身,那么做链轮需要注意什么?下面给大家讲解一下做seo链轮时需要注意的5个细节 1.这里的链接必须是单向的,并不是双向的.单向链接传递的权重要高的多. 2.博客圈不能封闭,也就是说,e博客不能链向a博客,因为这样会造成一个搜索引擎的爬行循环,极易被搜索引擎以作弊方式处理.在网上有很多封闭的链轮图型,那些都是不正确的. 3.链接的不仅是博客首页,发布的博客文章之间也要做链轮 4.一个链轮不需要太大,5个博客构成一个链轮就差不

浅谈在做seo时容易忽略的的几点错误(一)

很多朋友听到seo,或者一讲到seo,脑子里想的肯定就是选取目标关键词.每天坚持发外链,就达到了seo的目的了.其实,如果说seo只是完成选关键词以及发外链这两个工作就ok了,那就是真的打错特错了.因为seo,是一个系统的工程,除了发外链.选关键词.还有一系列的工作要做,因此本文就说说一些做seo时比较容易忽略的几点. 首先:把优化网站理解成优化首页 SEO优化的是整站而不仅仅是首页.很多朋友在给网站镶嵌关键词时,考虑的只是首页.网页标题以及描述也只是把首页弄好了就兴冲冲的区发外链了,全然不管内

做SEO时如何选个适合自己的老板

我们站长在做网站SEO的时候并不是一定给自己做的,很多时候也是给别人"打工",替别人的网站做SEO,这样,就有可能遇见各种各样的老板.有话说"千里马常有而伯乐不常有",站长们在给别人做站时要是遇见个内行的还好,要是遇见个外行的,只会无理由的给你提硬性要求时,简直让人有生不如死的感觉,因此,选好一个老板也是站长做SEO时很必要的生存手段!具体要如何去做,其实也简单,你要学会察言观色就可,避免开以下几种情况存在的老板就基本没多大问题了. 一.本身网站就很烂的老板 俗话说

对硬盘做镜像时按位与按文件的区别

[网友问题] 对硬盘做镜像时,听说有按位与按文件两种,都有什么特点?都是用在什么情况下的?GHOST是哪种方式? [回答] 备份工作的按位(实际上是按扇区)转存意味着与文件系统无关.数据源是什么样子.有多大,目标就是什么样子,就有多大.即使没有分区.或者无法识别的分区,或者分区逻辑结构有错误,都可以完整的(包括逻辑错误)一起备份到目标设备上. 按文件转存意思是要对文件系统解释atch后,只按文件的方式提取到目标设备上.这个转存程序必须可以解释对应的文件系统,同时不会提取非文件数据.他的数据量也取

win2008做群集时出现的问题的解决方法

在win2008做群集时出现"验证防火墙配置时出错,已添加了具有相同键的项"的问题 在做win2008群集时,我们一般习惯于先装完一台服务器然后Ghost到另外一台服务器来节约时间,恰恰是这个举动造成出现验证群集时出错,会提示"验证防火墙配置时出错 已添加了具有相同键的项",如下图: 该问题是由于两台服务器网卡的GUID号相同造成,需要在注册中进行修改 单击 开始,单击 运行,键入 regedit,然后单击 确定. 查找并删除以下注册表子项: HKEY_LOCAL_

使用Nunit+Access做单元测试时连接已经关闭

今天在使用Nunit+Access做单元测试时,本来正常的代码突然间不能正常通过在VS2005 Express中调试则可以正常通过,正在那闷中发现我打开了Access,结果关了Access代码则能正常通过了