博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Class:DbConnectionManipulator.cs
阅读量:7040 次
发布时间:2019-06-28

本文共 7188 字,大约阅读时间需要 23 分钟。

ylbtech-Class:DbConnectionManipulator.cs

 

1.
1、DbConnectionManipulator.cs
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 = 8;        protected IDbConnection GetConnection() {            return GetMainDatabaseConnection();        }        protected void Run(Action
work) { Run(GetConnection(), work); } protected void Run(IDbConnection connection, Action
work) { using (connection) { work(connection); } } protected void RunInTransaction(Action
work) { RunInTransaction(GetConnection(), work); } protected void RunInTransaction(IDbConnection connection, Action
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
work, string databaseCs = "") { RunMainDatabase(GetMainDatabaseConnection(databaseCs), work); } public static T RunMainDatabase
(Func
work, string databaseCs = "") { return RunMainDatabase(GetMainDatabaseConnection(databaseCs), work); } private static void RunMainDatabase(IDbConnection connection, Action
work) { using (connection) { work(connection); } } private static T RunMainDatabase
(IDbConnection connection, Func
work) { using (connection) { return work(connection); } } public static void RunMainDatabaseInTransaction(Action
work, string databaseCs = "") { RunMainDatabaseInTransaction(GetMainDatabaseConnection(databaseCs), work); } public static T RunMainDatabaseInTransaction
(Func
work, string databaseCs = "") { return RunMainDatabaseInTransaction(GetMainDatabaseConnection(databaseCs), work); } public static void RunMainDatabaseInTransaction(IDbConnection connection, Action
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
(IDbConnection connection, Func
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
work) { for (var i = 1; i <= SplitDatabaseCount; i++) { RunMainDatabase(work, $"DatabaseCs{i}"); } } public static void ForEachSplitDatabase(Func
work) { for (var i = 1; i <= SplitDatabaseCount; i++) { if (RunMainDatabase(work, $"DatabaseCs{i}")) { break; } } } public static int GetTeamDatabaseIndex(int teamId) { return teamId % SplitDatabaseCount + 1; } public static string GetTeamDatabaseName(int teamId) { return $"DatabaseCs{(teamId % SplitDatabaseCount + 1)}"; } public static string GetIndexDatabaseName() { return "DatabaseCs"; } protected Task RunAsync(Func
work) { return RunAsync(GetConnection(), work); } protected Task RunAsync(IDbConnection connection, Func
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
work) { return RunMainDatabaseAsync(GetMainDatabaseConnection(), work); } private static async Task RunMainDatabaseAsync(IDbConnection connection, Func
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、
2.
 
3.
 
4.
 
5.
 
 
6.
 
warn 作者:
出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
你可能感兴趣的文章
生活的苦逼
查看>>
在iptables防火墙下开启vsftpd的端口
查看>>
Mysql、MariaDB 新型主从集群配置GTID
查看>>
Linux HA Cluster的实例演示(2)
查看>>
Delphi之word报表
查看>>
unity的默认文件目录及脚本之间的执行顺序
查看>>
angular 定时函数
查看>>
移动端app测试关注点
查看>>
Android 仿QQ消息界面
查看>>
a demo for how to use QThread
查看>>
扩展欧几里德算法
查看>>
【原创】多字节版本下MFC控件处理字符集的BUG
查看>>
ntp服务器
查看>>
子线程中刷新了UI
查看>>
UIPopoverController事件分发
查看>>
记一次在线安装postgresql-9.4的问题
查看>>
zabbix/自动发现规则
查看>>
SQL Server 命令行操作
查看>>
当cpu飙升时,找出php中可能有问题的代码行
查看>>
独孤九剑与黑客编程
查看>>