Dapper学习总结
看了《Dapper从入门到精通》后的总结
(1)Dapper 是直接扩展 IDBConnection,而且是单独一个文件,可以直接嵌入到项目中使用。
(2)通过手写sql语句,调用execute方法添加数据,返回的是影响的行数;通过实体,调用insert方法添加数据,返回的是主键值。
(3)在IDBconnection中使用事务,主要注意在执行 Insert 方法时传入Transaction,用try...catch捕获异常,并在catch块调用Rollback(否则的话会出现部分提交的情况)。
例:
public bool InsertWithTran()
{
using (var conn = Connection)
{
int _departmentid = , _employeeid = ,_rnum=;
var _departmentname = new t_department { departmentname = "应用开发部ENTITY", introduce = "应用开发部主要开始公司的应用平台" };
var _employee = new t_employee {displayname = "Micro",email ="1441299@qq.com",loginname ="Micro",password = "",mobile = ""};
conn.Open();
var _tran=conn.BeginTransaction();
try
{
_departmentid=conn.Insert(_departmentname, transaction: _tran).Value;
++_rnum;
_employeeid = conn.Insert(_employee, transaction: _tran).Value;
++_rnum;
conn.Insert(new t_derelation { departmentid = _departmentid, employeeid = _employeeid }, transaction: _tran);
++_rnum;
_tran.Commit();
}
catch
{
_rnum = ;
_tran.Rollback();
}
return _rnum > ;
}
}
(4)调用存储过程,要通过DynamicParameters这个类传递参数,再把命令类型赋值为StoredProcedure,然后通过Query调用存储过程。
例:
public Tuple<string,string> ProceDemo()
{
int employeeid = ;
var _mobile = "";
var _dy = new DynamicParameters();
_dy.Add("employeeid", employeeid);
_dy.Add("displayname", string.Empty, dbType: DbType.String, direction: ParameterDirection.Output);
using (var _conn = Connection)
{
_conn.Open();
_mobile= _conn.Query<string>("p_Procedemo", _dy, commandType: CommandType.StoredProcedure).FirstOrDefault();
}
return Tuple.Create(_mobile, _dy.Get<string>("displayname"));
}
(5)基于SQL查询:使用Query<T>泛型方法;实体直接查询:使用GetList<T>泛型方法。
(6)多表查询,使用QueryMultiple(),可以返回查询中每条sql语句的数据集合。
例:
public void GetMultiEntity()
{
string _sql = "SELECT * FROM t_department AS a;SELECT * FROM t_employee AS a";
using (var _conn = Connection)
{
var _grid = _conn.QueryMultiple(_sql);
var _department = _grid.Read<t_department>();
var _employee = _grid.Read<t_employee>();
}
}
(7)Dapper的实体映射:
a. 属性不编辑,用[Editable(false)]这个特性标记
b. 类名到表名的映射,用[Table("tablename")]特性
c. 主键映射,如果有Id属性,默认为主键,否则要添加[Key]特性
Dapper学习总结的更多相关文章
- dapper 学习
上一篇, 提到Query<Test>查询的时候, 如果Test中包含自定义class, Dapper不会给自定义class完成映射, 而是直接给null, 其实是可以实现的, 答案就在下面 ...
- Dapper学习(三)之其他用法
这里说的其他用法,是指 Async,Buffered,Transaction,Stored Procedure. 1. 首先 dapper支持异步 ExecuteAsync, QueryAsync, ...
- Dapper学习笔记(1)-开始
Dapper是一款开源的轻量级ORM工具,源代码下载地址为https://github.com/StackExchange/dapper-dot-net,其具有以下特点: 1.Dapper是一个轻型的 ...
- .net Dapper 学习系列(1) ---Dapper入门
目录 写在前面 为什么选择Dapper 在项目中安装Dapper 在项目中使用Dapper 在项目中使用Dapper 进行单表增删改数据操作 总结 写在前面 Dapper 是一款轻量级ORM架构.为解 ...
- Dapper学习(一)之Execute和Query
Dapper是一个用于.NET的简单的对象映射,并且在速度上有着轻ORM之王的称号. Dapper扩展IDbConnection,提供有用的扩展方法来查询数据库. 那么Dapper是怎样工作的呢? 总 ...
- .net Dapper 学习系列(2) ---Dapper进阶
目录 写在前面 前期准备 Dapper 单表批量添加 在Dapper 多表查询 在Dapper 调用存储过程 在Dapper 使用QueryMultiple进行多表查询 在Dapper 使用事务进行多 ...
- Dapper学习笔记(一)
https://github.com/StackExchange/dapper-dot-net Dapper是对IDbConnection的扩展,需要使用Dapper提供的扩展只需要把SqlMappe ...
- Dapper学习笔记(4)-事务
Dapper中对事务的处理也非常简单,如下代码所示: private void DapperTransaction() { using (IDbConnection con = OpenConnect ...
- Dapper学习笔记(2)-链接引用
在研究Dapper源码时发现Dapper NET45类库中的SqlMapper.cs文件前面有个蓝色的箭头图标,发现在Dapper NET45文件夹下根本不存在SqlMapper.cs文件,其文件属性 ...
- Dapper学习 - Dapper.Rainbow(三) - Read
前面已经介绍了新增/修改/删除了, 接下来介绍一下Rainbow的Read方法. 一.Read -- Rainbow原生 1. 先看测试代码 var conStr = ConfigurationMan ...
随机推荐
- Unite Europe案例项目《影子战术》层级优化经验分享
http://forum.china.unity3d.com/thread-25087-1-9.html 在Unite Europe 2017的Keynote主题演讲中,我们为大家分享了将主机游戏&l ...
- Unite 2017 干货整理 同步篇
http://www.kisence.com/2017/05/17/unite-2017-gan-huo-zheng-li-tong-bu-pian/ Unite 2017 干货整理 同步篇 2017 ...
- Hadoop 2.7.3 HA 搭建及遇到的一些问题
看了Hadoop的一个7天视频教程,里面给出了搭建的详细步骤,教程中是按2.4.1版本搭建的,我用的是2.7.3版本,好像没什么差别.下面是抄过来的,加了一点注释. hadoop2.0已经发布了稳定版 ...
- python 之 列表生成式、生成器表达式、模块导入
5.16 列表生成式 l=[]for i in range(100): l.append('egg%s' %i)print(l)l=['egg%s' %i for i in range(100 ...
- GYM 101933E(记忆化搜索)
用每个人的血量作为状态去搜索T飞,考虑题解中更好的搜索方式:每种血量有多少个人作为状态.这样会减去很多重复的状态,因为只要乘一下就得到了所有相同情况的和. 虽然我不会算,但是直观感受起来复杂度比较优秀 ...
- bzoj2662: [BeiJing wc2012]冻结 最短路 建图
好久没有1A题啦♪(^∇^*) 一个sb建图,我居然调样例调了10min 看起来是双向边,其实在建图的时候要当成有向图, 否则他会时间倒流(233) 把每个点裂成k个点,然后把每条边裂成4条边(正向反 ...
- Net Core微服务
Net Core微服务 http://www.cnblogs.com/qhbm/category/1235971.html 开发工具:VS2017 .Net Core 2.1 什么是微服务? 单体结构 ...
- Linux上使用VIM进行.Net Core
如何在Linux上使用VIM进行.Net Core开发 对于在Linux上开发.Net Core的程序员来说, 似乎都缺少一个好的IDE.Windows上有Visual Studio, Mac上有Vi ...
- Joda-Time简介
Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成. Joda-Ti ...
- zk实现服务选举
非公平选举算法1)首先通过zk创建一个 /server 的PERSISTENT节点 2)多台机器同时创建 /server/leader EPHEMERAL子节点 3)子节点只能创建一个,后创建的会失败 ...