首页 > 其他分享 >当你使用LINQ做底层时,最好设计一个工厂,不要把LINQ的动作暴露给业务层

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

时间:2022-12-12 23:02:02浏览次数:33  
标签:divDataContext sysTimer 暴露 System LINQ static 数据库 底层

  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:

作者:仓储大叔,张占岭,

荣誉:微软MVP

标签:divDataContext,sysTimer,暴露,System,LINQ,static,数据库,底层
From: https://blog.51cto.com/u_15765017/5932134

相关文章

  • docker之mount namespace底层原理
    Linux容器最基础的两种技术Namespace作用是“隔离”,它让应用进程只能看到该Namespace内的“世界”Cgroups作用是“限制”,它给这个“世界”围上了一圈看不见的墙这......
  • 微软的Linq方法太少?用MoreLinq试试,多到用不过来
    如果你用Linq语法进行多表关联,就少不了下面这种语法。说实话,不清楚微软当时这样架构有什么想法或好处,总是看着很别扭。像SQL语句那样直接LeftJoin不香吗?比如将数据插入到源......
  • 重学c#系列——linq(1) [二十七]
    前言简单介绍一下linq,linq很多人其实用的很熟练了,但是有些人不知道自己用的是linq。正文在介绍linq之前,先介绍一下集合。publicinterfaceICollection<T>:IEnume......
  • 作者推荐 | 【Java难点攻克】「NIO和内存映射性能提升系列」彻底透析NIO底层的内存映
    NIO与内存映射文件Java类库中的NIO包相对于IO包来说有一个新功能就是【内存映射文件】,在业务层面的日常开发过程中并不是经常会使用,但是一旦在处理大文件时是比较理想的提......
  • 【Java难点攻克】「NIO和内存映射性能提升系列」彻底透析NIO底层的内存映射机制原理与
    NIO与内存映射文件Java类库中的NIO包相对于IO包来说有一个新功能就是【内存映射文件】,在业务层面的日常开发过程中并不是经常会使用,但是一旦在处理大文件时是比较理想的......
  • LinqPad基本使用
    LinqPadThe.NETProgrammer’sPlayground(.net开发的乐园)主要作用:快速开发(小例子、新库测试、Demo等)快速数据库链接(EFcore+LinqToDB)丰富的结果展示(支持富输出(层......
  • 【Swift底层进阶--018:高阶函数】
    ​​Swift​​​是一门面向协议的语言,开发中我们已经充分享受到面向协议编程的便利,但​​Swift​​​相比​​OC​​还有一个更重要的优势,那就是对函数式编程提供了强大的支......
  • LINQ教程
    在说LINQ之前必须先说说几个重要的C#语言特性一:与LINQ有关的语言特性1.隐式类型(1)源起在隐式类型出现之前,我们在声明一个变量的时候,......
  • LINQ学习
     varrest=frommastinmasterwheremast.level>6selectmast; //from后面设置查询的集合、where后面跟查询条件、表示mast的结果集合返回多条件:wheremast.......
  • Redux底层源码
    Redux底层源码底层就是发布与订阅模式constcreareStore=(reducer)=>{letlist=[];letstate=reducer()constsubscribe=(callback)=>{list.p......