Class:DbConnectionManipulator.cs
| ylbtech-Class:DbConnectionManipulator.cs |
| 1.返回顶部 |
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks; namespace DS.JZB.Common {
public abstract class DbConnectionManipulator {
public static string DatabaseConnectionStringName = "DatabaseCs";
public static string IndexDatabaseConnectionStringName = "DatabaseCs";
public const int SplitDatabaseCount = ; protected IDbConnection GetConnection() {
return GetMainDatabaseConnection();
} protected void Run(Action<IDbConnection> work) {
Run(GetConnection(), work);
} protected void Run(IDbConnection connection, Action<IDbConnection> work) {
using (connection) {
work(connection);
}
} protected void RunInTransaction(Action<IDbConnection, IDbTransaction> work) {
RunInTransaction(GetConnection(), work);
} protected void RunInTransaction(IDbConnection connection, Action<IDbConnection, IDbTransaction> work) {
using (connection) {
using (var transaction = connection.BeginTransaction()) {
try {
work(connection, transaction);
transaction.Commit();
}
catch {
transaction.Rollback();
throw;
}
}
}
} public static IDbConnection GetMainDatabaseConnection(string databaseCs = "") {
//if (string.IsNullOrEmpty(databaseCs)) {
// if (UserContext.CurrentUser != null && UserContext.CurrentUser.GlobalTeamId > 0) {
// var teamId = UserContext.CurrentUser.GlobalTeamId;
// DatabaseConnectionStringName = "DatabaseCs" + (teamId % SplitDatabaseCount + 1);
// }
// else {
// DatabaseConnectionStringName = "DatabaseCs";
// }
//}
//else {
// DatabaseConnectionStringName = databaseCs;
//} var connection =
new SqlConnection(ConfigurationManager.ConnectionStrings[DatabaseConnectionStringName].ConnectionString);
connection.EnsureOpen();
return connection;
} public static void RunMainDatabase(Action<IDbConnection> work, string databaseCs = "") {
RunMainDatabase(GetMainDatabaseConnection(databaseCs), work);
} public static T RunMainDatabase<T>(Func<IDbConnection, T> work, string databaseCs = "") {
return RunMainDatabase(GetMainDatabaseConnection(databaseCs), work);
} private static void RunMainDatabase(IDbConnection connection, Action<IDbConnection> work) {
using (connection) {
work(connection);
}
} private static T RunMainDatabase<T>(IDbConnection connection, Func<IDbConnection, T> work) {
using (connection) {
return work(connection);
}
} public static void RunMainDatabaseInTransaction(Action<IDbConnection, IDbTransaction> work,
string databaseCs = "") {
RunMainDatabaseInTransaction(GetMainDatabaseConnection(databaseCs), work);
} public static T RunMainDatabaseInTransaction<T>(Func<IDbConnection, IDbTransaction, T> work,
string databaseCs = "") {
return RunMainDatabaseInTransaction(GetMainDatabaseConnection(databaseCs), work);
} public static void RunMainDatabaseInTransaction(IDbConnection connection,
Action<IDbConnection, IDbTransaction> work) {
#if DEBUG
//var guid = Guid.Empty;
//if (HttpContext.Current.Items.Contains("DUUID")) {
// guid = (Guid)HttpContext.Current.Items["DUUID"];
//}
//else {
// guid = Guid.NewGuid();
// HttpContext.Current.Items["DUUID"] = guid;
//} //var logger = typeof(DbConnectionManipulator).ObtainLog();
//logger.Debug($"[{guid.ToString("n")}] get connection to execute db queries");
#endif using (connection) {
using (var transaction = connection.BeginTransaction()) {
try {
work(connection, transaction);
transaction.Commit();
}
catch(Exception ex) {
transaction.Rollback();
throw;
}
}
} #if DEBUG
//logger.Debug($"[{guid.ToString("n")}] release connection to connection pool");
#endif
} public static T RunMainDatabaseInTransaction<T>(IDbConnection connection,
Func<IDbConnection, IDbTransaction, T> work) {
#if DEBUG
//var guid = Guid.Empty;
//if (HttpContext.Current.Items.Contains("DUUID")) {
// guid = (Guid)HttpContext.Current.Items["DUUID"];
//}
//else {
// guid = Guid.NewGuid();
// HttpContext.Current.Items["DUUID"] = guid;
//} //var logger = typeof(DbConnectionManipulator).ObtainLog();
//logger.Debug($"[{guid.ToString("n")}] get connection to execute db queries");
#endif T result = default(T); using (connection) {
using (var transaction = connection.BeginTransaction()) {
try {
result = work(connection, transaction);
transaction.Commit();
}
catch {
transaction.Rollback();
throw;
}
}
} #if DEBUG
//logger.Debug($"[{guid.ToString("n")}] release connection to connection pool");
#endif return result;
} public static void RunAllSplitDatabase(Action<IDbConnection> work) {
for (var i = ; i <= SplitDatabaseCount; i++) {
RunMainDatabase(work, $"DatabaseCs{i}");
}
} public static void ForEachSplitDatabase(Func<IDbConnection, bool> work) {
for (var i = ; i <= SplitDatabaseCount; i++) {
if (RunMainDatabase(work, $"DatabaseCs{i}")) {
break;
}
}
} public static int GetTeamDatabaseIndex(int teamId) {
return teamId % SplitDatabaseCount + ;
} public static string GetTeamDatabaseName(int teamId) {
return $"DatabaseCs{(teamId % SplitDatabaseCount + 1)}";
} public static string GetIndexDatabaseName() {
return "DatabaseCs";
} protected Task RunAsync(Func<IDbConnection, Task> work) {
return RunAsync(GetConnection(), work);
} protected Task RunAsync(IDbConnection connection, Func<IDbConnection, Task> work) {
#if DEBUG
//var guid = Guid.Empty;
//if (HttpContext.Current.Items.Contains("DUUID")) {
// guid = (Guid)HttpContext.Current.Items["DUUID"];
//}
//else {
// guid = Guid.NewGuid();
// HttpContext.Current.Items["DUUID"] = guid;
//} //var logger = typeof(DbConnectionManipulator).ObtainLog();
//logger.Debug($"[{guid.ToString("n")}] get connection to execute db queries");
#endif Task result = null; using (connection) {
result = work(connection);
connection.Dispose();
} #if DEBUG
//logger.Debug($"[{guid.ToString("n")}] release connection to connection pool");
#endif return result;
} public static Task RunMainDatabaseAsync(Func<IDbConnection, Task> work) {
return RunMainDatabaseAsync(GetMainDatabaseConnection(), work);
} private static async Task RunMainDatabaseAsync(IDbConnection connection, Func<IDbConnection, Task> work) {
#if DEBUG
//var guid = Guid.Empty;
//if (HttpContext.Current.Items.Contains("DUUID")) {
// guid = (Guid) HttpContext.Current.Items["DUUID"];
//}
//else {
// guid = Guid.NewGuid();
// HttpContext.Current.Items["DUUID"] = guid;
//} //var logger = typeof(DbConnectionManipulator).ObtainLog();
//logger.Debug($"[{guid.ToString("n")}] get connection to execute db queries");
#endif using (connection) {
await work(connection);
connection.Dispose();
} #if DEBUG
//logger.Debug($"[{guid.ToString("n")}] release connection to connection pool");
#endif
}
} public static class DbConnectionExtension {
public static void EnsureOpen(this IDbConnection @this) {
if (@this.State == ConnectionState.Closed) {
@this.Open();
}
}
}
}
| 2.返回顶部 |
| 3.返回顶部 |
| 4.返回顶部 |
| 5.返回顶部 |
| 6.返回顶部 |
![]() |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |
Class:DbConnectionManipulator.cs的更多相关文章
- ASP.NET MVC:UrlHelper.cs
ylbtech-funcation-Utility: ASP.NET MVC:UrlHelper.cs 充当表示 ASP.NET Razor 页的类的基类. 1.UrlHelper 类返回顶部 1-1 ...
- ASP.NET MVC:WebPageBase.cs
ylbtech-funcation-Utility: ASP.NET MVC:WebPageBase.cs 充当表示 ASP.NET Razor 页的类的基类. 1.A,WebPageBase 抽象类 ...
- ASP.NET MVC:WebPageRenderingBase.cs
ylbtech-funcation-Utility: ASP.NET MVC:WebPageRenderingBase.cs 提供用于呈现使用 Razor 视图引擎的页的方法和属性. 1.A,WebP ...
- ASP.NET MVC:WebViewPage.cs
ylbtech-funcation-Utility: ASP.NET MVC:WebViewPage.cs 表示呈现使用 ASP.NET Razor 语法的视图所需的属性和方法. 1.A,WebVie ...
- 基本教程篇--第一节:InitialSampleDemo.cs介绍
第一节:InitialSampleDemo.cs介绍 为了讲解方便,我先附上源代码和效果图. 代码如下: using System; using System.Drawing; ...
- C# Json反序列化 C# 实现表单的自动化测试<通过程序控制一个网页> 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案) 大话设计模式:原型模式 C# 深浅复制 MemberwiseClone
C# Json反序列化 Json反序列化有两种方式[本人],一种是生成实体的,方便处理大量数据,复杂度稍高,一种是用匿名类写,方便读取数据,较为简单. 使用了Newtonsoft.Json,可以自 ...
- .Net魔法堂:AssemblyInfo.cs文件详解
一.前言 .net工程的Properties文件夹下自动生成一个名为AssemblyInfo.cs的文件,一般情况下我们很少直接改动该文件.但我们实际上通过另一个形式操作该文件.那就是通过在鼠标右键点 ...
- .NET Core 项目经验总结:Startup.cs 介绍(二)
原文地址(个人博客):http://www.gitblogs.com/Blogs/Details?id=643c9664-dc4e-42cf-a15f-5368ebfcd7c9 第一次面对 Start ...
- 架构风格:万金油CS与分层
计算机科学家David Wheele曾说过这么一句话: All problems in computer science can be solved by another level of indir ...
随机推荐
- Python select解析
一.首先列一下,sellect.poll.epoll三者的区别 1.select a.select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监控多个文件描述符的数组,当 ...
- Codeforces Gym100543G Virus synthesis 字符串 回文自动机 动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/CF-100543G.html 题目传送门 - CF-Gym100543G 题意 你可以对一个字符串进行以下两种操 ...
- JAVA项目中常用的异常处理情况
1.数学运算异常( java.lang.arithmeticexception) 程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数学运算的地方,公式是不 ...
- HDU 1175 连连看 (DFS+剪枝)
<题目链接> 题目大意:在一个棋盘上给定一个起点和终点,判断这两点是否能通过连线连起来,规定这个连线不能穿过其它的棋子,并且连线转弯不能超过2次. 解题分析:就是DFS从起点开始搜索,只不 ...
- HDU 1054 Strategic Game (最小点覆盖)【二分图匹配】
<题目链接> 题目大意:鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他无法找到解决方案,速度不够快,那么他很伤心.现在,他有以下的问题.他必须捍卫一个中世纪的城市,形成了树的道路.他把战士的 ...
- python MySQLdb 字段与关键字重名
在做一个东西的时候,将字段命名为desc和describe. 构造sql语句并插入数据,报语法错误.一个一个字段排查,发现是这两个字段的问题. 找了一下,这两个是关键字. 所以,字段与关键字重名的时候 ...
- AOP编程-理论篇
本节内容主要讲解AOP编程理念,包括概念讲解,使用AOP的优势,如何实现AOP,常见的实现AOP的方法. 1.AOP的概念 AOP是Aspect Oriented Programming的缩写,意思是 ...
- .NET SQL优化
1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大 ...
- 现在没有可用的软件包 *** ,但是它被其它的软件包引用了 和 E: 无法定位软件包 ***问题解决(思路清晰干货)
问题现象 root@zhouls-virtual-machine:~/snort_src# apt-get install bison flex 正在读取软件包列表... 完成 正在分析软件包的依赖关 ...
- 如何做出一个更好的Machine Learning预测模型【转载】
作者:文兄链接:https://zhuanlan.zhihu.com/p/25013834来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 初衷 这篇文章主要从工程角度来 ...
