当你使用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: 
时间: 2024-10-05 05:07:45

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

ASP.NET Connections大会上我做的讲座的讲义: WPF/E,LINQ和ASP.NET技巧/诀窍

摘要:ASP.NET Connections大会上我做的讲座的讲义: WPF/E,LINQ和ASP.NET技巧/诀窍 [原文位址]Slides from my ASP.NET Connections talks: WPF/E, LINQ and ASP.NET Tips/Tricks [原文发表日期] Friday, March 30, 2007 11:28 PM 这个星期早些时候,我在奥兰多举行的ASP.NET Connections大会上做了三场讲座.下面是我做的三场讲座的讲义/Demo程序

VS2013 C# 调用 cognex 的QuickBuild做程序时发生一个错误

今天在用 VS2013 C# 调用 cognex 的QuickBuild做程序时发生一个错误,如下所示 混合模式程序集是针对"v2.0.50727"版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集 网上搜索得到解决办法: 在app.config中添加一个配置节:startup <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime

Nginx/tengine做cache时缓存机制—存不存、存多久、用不用方法论(图自画)

Nginx/tengine(后面名称只写nginx了)单纯做cache性能比不过ats,特别是在磁盘处理方面,不过论综合能力nginx就是大拿了,他集web服务器.负载均衡.cache三种能力于一身,可以说是非常综合性的选手.比如说一个中型网站的场景选型,前端是负载,后端托着一堆apache服务器,现在该到前端负载选型的了,虽然lvs和ha单纯从负载的性能要比nginx好一些,但我还是会选nginx,因为nginx在做负载的同时,可以将热点的静态内容cache一遍,做一次加速,无形间减轻了后端w

以函数返回值做参数时,函数调用的顺序

环境:vs2013 在下面的代码中 1 //类似于下面的代码 2 3 foo(char*,char*,char*); 4 5 char* str ="A#B#C"; 6 7 foo(strtok(str,"#"),strtok(NULL,"#"),strtok(NULL,"#")); 预计让函数foo得到("A","B","C")的参数,程序编译的时候没问题,但是运行

cross,across,through,pass,做&quot;穿过&quot;时的区别

cross,across,through,pass,做"穿过"时的区别 ①:cross ,动词,侧重于横穿,比如过马路,过河: 1.He crossed the road. 他横穿那条马路. ②:across 是由cross变过来的,意思一样,只是词性不同,across是介词,动词+across=cross, 2.A dog swam across the river. 狗游过了河3.He jumped across the the ditch. 他跳过那条沟. ③:through,介

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

原网址 http://blog.sina.com.cn/s/blog_6bb07f83010152z0.html 在使用R做数据挖掘时,最常用的数据结构莫过于dataframe了,下面列出几种常见的dataframe的操作方法.1.查看数据 head(dataframe) # 查看数据前10行tail(dataframe) # 查看数据后10行 2.合并数据(1)data.frame(x,y)x,y是dataframe或者一列数据,x和y的行数一样,该操作得到一个新的dataframe,该dat

如何让oracle实验本在不做实验时性能提升——win7下举例

型号:ThinkPad E431 系统:WIN7 实验使用的笔记本不使用数据库时,建议将oracle关闭,使其释放占用的资源. oracle软件是相当耗费资源的,若PC硬件性能不佳,数据库在不用时开启将很大程度上影响到计算机的性能. 1.关闭oracle 2.关闭服务 在不做oracle有关的试验时,虽然数据库已经退出了,但是后台的服务并没有停止,会占用系统的一定资源,我们可以将它们关闭. 如果有装虚拟机的话,包括Vmware的相关服务,在不使用时也会启动,这都是影响pc运行性能的因素,可以手工

Powerdesigner 16.5 从SQL Server 2012做逆向工程时提示:Unable to list tables问题

原文:Powerdesigner 16.5 从SQL Server 2012做逆向工程时提示:Unable to list tables问题 公司深圳团队开发有一套系统在华北区这边推向客户,在一次更新补丁时,由于发生了数据字典的变更,但深圳团队并未给出数据库的更新脚本,只给了新版本的数据库创建脚本,为了保证客户方系统中已有数据不丢失,只能自己想办法了:用Powerdesigner把新版本数据库逆向过来后,将此模型Apply到已有数据库中,此时Powerdesigner会比较两个版本的差异,只更新

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

MySQL做练习时总结的一些知识点     0:mysql有三种注释方法 上午插入记录的时候一直没有成功,郁闷不知道为什么.因为是很多条记录一起插入,中间一些不用的数据就用"--"来注释了,结果没有效果. 没有办法,在网上找了找,才发现注释符"--"错了,需要一个空格,应该是"-- ". mysql注释符有三种: 1.#... 2."--  ..." 3. mysql 服务器支持 # 到该行结束.-- 到该行结束 以及 的注释