Dapper连接与事务的简单封装
增删改查方面,已经有Dapper.Extension这么强大的工具了,我也实在没啥好写的,就随手写了个看起来比较优雅的连接与事务的封装。在之后使用Dapper.Extension类库时,完全可以照搬进去。
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using Dapper;
using DapperDemo.Models;
namespace DapperDemo
{
internal class Program
{
public static string ConnString = "Server=(localdb)\\MSSQLLocalDB;Database=DapperDB;";
private static void Main(string[] args)
{
BuckInsert();
BuckInsert();
BuckInsert();
DeleteAfterUpdating();
GetPersonList().ForEach(c=>Console.WriteLine(c.UserName));
}
public static List<Person> GetPersonList()
{
var people = new List<Person>();
ExecuteWithoutTransaction(conn =>
{
people = conn.Query<Person>("select * from Person where id>@id", new {id = 2}).ToList();
});
return people;
}
public static bool BuckInsert()
{
return ExecuteWithTransaction((conn, trans) =>
{
var r = conn.Execute(
@"insert Person(username, password,age,registerDate,address) values (@a, @b,@c,@d,@e)",
new[]
{
new {a = 1, b = 1, c = 1, d = DateTime.Now, e = 1},
new {a = 2, b = 2, c = 2, d = DateTime.Now, e = 2},
new {a = 3, b = 3, c = 3, d = DateTime.Now, e = 3}
},trans);
return r;
});
}
public static bool Update()
{
return ExecuteWithTransaction((conn, trans) =>
{
var r = conn.Execute(@"update Person set password='www.lanhuseo.com' where username=@username",
new {username = 2}, trans);
return r;
});
}
public static bool Delete()
{
return ExecuteWithTransaction((conn, trans) =>
{
var r = conn.Execute(@"delete from Person where id=@id", new {id = 1009}, trans);
return r;
});
}
public static bool DeleteAfterUpdating()
{
return ExecuteWithTransaction((conn, trans) =>
{
var r = conn.Execute(@"update Person set password='www.lanhuseo.com' where id=@id", new {id = 1009}, trans,
null, null);
r += conn.Execute("delete from Person where id=@id", new {id = 1010}, trans, null, null);
return r;
});
}
/// <summary>
/// Used for query
/// </summary>
/// <param name="action"></param>
public static void ExecuteWithoutTransaction(Action<SqlConnection> action)
{
UseConnectObj(action);
}
/// <summary>
/// Used for cud
/// </summary>
/// <returns>Execute Result</returns>
/// <param name="func"></param>
public static bool ExecuteWithTransaction(Func<SqlConnection, IDbTransaction, int> func)
{
var r = 0;
UseConnectObj(conn =>
{
IDbTransaction trans = conn.BeginTransaction();
r = func(conn, trans);
trans.Commit();
});
return r > 0;
}
/// <summary>
/// Use Action Connection
/// </summary>
/// <param name="action"></param>
public static void UseConnectObj(Action<SqlConnection> action)
{
using (var conn = new SqlConnection(ConnString))
{
conn.Open();
action(conn);
}
}
}
}
Dapper连接与事务的简单封装的更多相关文章
- .net core 中简单封装Dapper.Extensions 并使用sqlsuger自动生成实体类
引言 由公司需要使用dapper 同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions 并配套 生成实体类小工具的方 ...
- Redisclient连接方式Hiredis简单封装使用,连接池、屏蔽连接细节
工作须要对Hiredis进行了简单封装,实现功能: 1.API进行统一,对外仅仅提供一个接口. 2.屏蔽上层应用对连接的细节处理: 3.底层採用队列的方式保持连接池,保存连接会话. 4.重连时採用时间 ...
- Dapper连接Oracle
Dapper连接Oracle去年写过了篇博客,名字叫:让dapper支持Oracle 网址:http://www.cnblogs.com/ushou/archive/2012/09/28/270690 ...
- MongoDB Python官方驱动 PyMongo 的简单封装
最近,需要使用 Python 对 MongodB 做一些简单的操作,不想使用各种繁重的框架.出于可重用性的考虑,想对 MongoDB Python 官方驱动 PyMongo 做下简单封装,百度一如既往 ...
- Abp公共连接和事务管理方法
Conection 和事务管理在使用数据库的应用中是一个最重要的概念.当你打开一个连接,开始一个事务,如何来处理这些连接等等. 您也许知道,.NET使用了连接池.所以,创建一个连接实际上是从连接池里得 ...
- 对pymysql的简单封装
#coding=utf-8 #!/usr/bin/python import pymysql class MYSQL: """ 对pymysql的简单封装 "& ...
- ADO简单封装(MFC)
简单封装了一下,不是很严谨. /************************************************************************/ /* INSTRUC ...
- MySQL的C++简单封装
/* *介绍:MySQL的简单封装,支持流操作输入输出MySQL语句,然而并没有什么软用,大二学生自娱自乐,有不足求指点 *作者:MrEO *日期:2016.3.26 */ 头文件 my_sql.h ...
- redis数据库操作的C++简单封装
用c++简单封装了redis的基本操作(hiredis) 接口包括:①链接和断开连接.②设置键值对(set).③查询键值对(get).④删除键值对(del).⑤将所有键显示出来 若任何一处发生错误,返 ...
随机推荐
- python基础——面向对象进阶下
python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) A. Trip For Meal
http://codeforces.com/contest/876/problem/A 题意: 一个人一天要吃n次蜂蜜,他有3个朋友,他第一次总是在一个固定的朋友家吃蜂蜜,如果说没有吃到n次,那么他就 ...
- spark2.1:读取hive中存储的多元组(string,double)失败
这两天和同事一起在想着如何把一个表的记录减少,表记录包含了:objectid(主小区信息),gridid(归属栅格),height(高度),rsrp(主小区rsrp),n_objectid(邻区),n ...
- 消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局
一.前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦 ...
- 最新的Windows环境搭建zeroMQ并使用java代码运行zeromq详细教程
最近项目要用zeromq,linux上很好配置使用,但是windows上配置与使用没有找到合适的解决方案,看的很头疼,这里自己总结下供大家参考 准备工作: 1.libzmq下载地址:https://g ...
- SocketServer源码学习(一)
SocketServer其实是对socket更高级的封装正如官网上说的:The socketserver module simplifies the task of writing network s ...
- Leetcode-颠倒整数
给定一个范围为 32 位 int 的整数,将其颠倒. 例 1: 输入: 123 输出: 321 例 2: 输入: -123 输出: -321 例 3: 输入: 120 输出: 21 注意: 假设我们的 ...
- 以太坊如何估计计算gas?
以太坊如何估计估算计算gas?Etherscan上transaction info中有个gas used by txn,结果跟remix给的结果以及geth中getTransactionReceipt ...
- codevs 2622 数字序列
2622 数字序列 提交地址:http://codevs.cn/problem/2622/ 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 De ...
- [SCOI 2009]windy数
Description 题库链接 找出在 \([A,B]\) 间满足相邻位差值至少为 \(2\) 的正整数个数. \(1\leq A,B\leq 2\cdot 10^9\) Solution 数位 \ ...