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 ...
随机推荐
- 通过impala更改Kudu表属性
开发人员可以通过更改表的属性来更改 Impala 与给定 Kudu 表相关的元数据.这些属性包括表名, Kudu 主地址列表,以及表是否由 Impala (内部)或外部管理. Rename an Im ...
- UOJ#30/Codeforces 487E Tourists 点双连通分量,Tarjan,圆方树,树链剖分,线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ30.html 题目传送门 - UOJ#30 题意 uoj写的很简洁.清晰,这里就不抄一遍了. 题解 首先建 ...
- UOJ#310 【UNR #2】黎明前的巧克力 FWT 多项式
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ310.html 题目传送门 - UOJ#310 题意 给定 $n$ 个数 ,请你选出两个不相交的集合(两个 ...
- Oozie
Oozie的功能模块 workflow 由多个工作单元组成 工作单元之间有依赖关系 MR1->MR2->MR3->result hadoop jar:提交1个MR oozie:监控当 ...
- 记Ubuntu Mongodb 和 Mysql的安装与使用
安装mongodb 参考链接 https://www.cnblogs.com/shileima/p/7823434.html https://blog.csdn.net/xlengji/article ...
- maven聚合工程无法install
对于maven聚合工程,有时候执行maven命令进行mvn clean install时会出一些莫名奇妙的错误: 一直报告找不到符号,仔细看了项目源代码也不知道是什么原因.首先确保项目所在路径为英文路 ...
- Team Queue POJ - 2259 (队列)
Queues and Priority Queues are data structures which are known to most computer scientists. The Team ...
- HDU 5178 pairs【二分】||【尺取】
<题目链接> 题目大意: 给定一个整数序列,求出绝对值小于等于k的有序对个数. 解题分析: $O(nlong(n))$的二分很好写,这里就不解释了.本题尺取$O(n)$也能做,并且效率很不 ...
- HDU 2289 Cup【二分】
<题目链接> 题目大意: 一个圆台型的杯子,它的上底半径和下底半径已经给出,并且给出它的高度,问你,体积为V的水倒入这个杯子中,高度为多少. 解题分析: 就是简单的二分答案,二分枚举杯中水 ...
- lvs负载均衡概述