Dapper的使用
轻量型ORM框架Dapper的使用
/// <summary>
/// 查询操作
/// </summary>
/// <typeparam name="T">返回集合的类型</typeparam>
/// <param name="sql">sql语句</param>
/// <param name="param">参数化值</param>
/// <returns></returns>
public IEnumerable<T> Query<T>(string sql, object param)
{
IEnumerable<T> _list = default(IEnumerable<T>);
if (!string.IsNullOrEmpty(sql))
{
try
{
_list = DbConnection.Query<T>(sql, param);
}
catch { }
}
return _list;
} /// <summary>
/// 执行存储过程查询操作
/// </summary>
/// <typeparam name="T">返回集合的类型</typeparam>
/// <param name="storedName">存储过程</param>
/// <param name="param">参数化值</param>
/// <returns></returns>
public IEnumerable<T> QueryStored<T>(string storedName, object param)
{
IEnumerable<T> _list = default(IEnumerable<T>);
if (!string.IsNullOrEmpty(storedName))
{
try
{
_list = DbConnection.Query<T>(storedName,commandType: CommandType.StoredProcedure);
}
catch { }
}
return _list;
} /// <summary>
/// 查询操作返回默认第一条数据(如返回null则创建默认类型)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public T FirstOrDefault<T>(string sql, object param)
{
var model = default(T);
if (!string.IsNullOrEmpty(sql))
{
try
{
model = DbConnection.Query<T>(sql, param).FirstOrDefault();
}
catch { }
}
return model == null ? Activator.CreateInstance<T>() : model;
} /// <summary>
/// 查询一组SQL语句并返回值
/// </summary>
/// <typeparam name="T1">第一条语句返回集合类型</typeparam>
/// <typeparam name="T2">第二条语句返回集合类型</typeparam>
/// <param name="sql">sql语句</param>
/// <param name="param">参数化值</param>
/// <returns></returns>
public Tuple<IEnumerable<T1>, IEnumerable<T2>> Query<T1, T2>(string sql, object param)
{
IEnumerable<T1> _item1 = null; IEnumerable<T2> _item2 = null;
if (!string.IsNullOrEmpty(sql))
{
try
{
using (var multi = DbConnection.QueryMultiple(sql, param))
{
_item1 = multi.Read<T1>();
_item2 = multi.Read<T2>();
}
}
catch { }
}
return Tuple.Create<IEnumerable<T1>, IEnumerable<T2>>(_item1, _item2);
} /// <summary>
/// 查询一组SQL语句并返回值
/// </summary>
/// <typeparam name="T1">第一条语句返回集合类型</typeparam>
/// <typeparam name="T2">第二条语句返回集合类型</typeparam>
/// <typeparam name="T3">第三条语句返回集合类型</typeparam>
/// <param name="sql">sql语句</param>
/// <param name="param">参数化值</param>
/// <returns></returns>
public Tuple<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>> Query<T1, T2, T3>(string sql, object param)
{
IEnumerable<T1> _item1 = null; IEnumerable<T2> _item2 = null; IEnumerable<T3> _item3 = null;
if (!string.IsNullOrEmpty(sql))
{
try
{
using (var multi = DbConnection.QueryMultiple(sql, param))
{
_item1 = multi.Read<T1>();
_item2 = multi.Read<T2>();
_item3 = multi.Read<T3>();
}
}
catch { }
}
return Tuple.Create<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>>(_item1, _item2, _item3);
} public void Dispose()
{
if (dbConnection != null)
{
try
{
bool isClosed = dbConnection.State == ConnectionState.Closed;
if (!isClosed) dbConnection.Close();
//dbConnection.Dispose();
}
catch { }
}
}
}

调用示例如下:

public abstract class BaseProvide
{
public Lazy<LiunianContext> lazyContext; protected LiunianContextDb
{
get
{
return lazyContext.Value;
}
} } public class EmployeeProvide : BaseProvide
{
/// <summary>
/// 获取数据
/// </summary>
/// <returns></returns>
public List<Employee> ListEmployeeByParam(int[] param)
{
string sql = "select * from Employee where ID in @Ids";
return Db.Query<Employee>(sql, new { Ids = param }).ToList();
} /// <summary>
/// 获取全部数据
/// </summary>
/// <returns></returns>
public List<Employee> ListEmployee()
{
string sql = "select * from Employee";
return Db.Query<Employee>(sql,null).ToList();
} /// <summary>
/// 查询单个实体
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public Employee loadEmployee(int Id)
{
string sql = "select * from Employee where ID= @Id";
return Db.FirstOrDefault<Employee>(sql, new { Id = Id });
} /// <summary>
/// 插入操作
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool InsertEmployee(Employee model)
{
StringBuilder sql = new StringBuilder();
sql.Append("insert into Employee values (@UpdateTime,@CreateTime,@State,@LoginName,@UserName,");
sql.Append("@RoleId,@IsUse)");
return Db.Execute(sql.ToString(), model);
} /// <summary>
/// 更新操作
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool UpdateEmployee(Employee model)
{
StringBuilder sql = new StringBuilder();
sql.Append("update Employee set UpdateTime = @UpdateTime where ID = @ID");
return Db.Execute(sql.ToString(), model);
} /// <summary>
/// 删除操作
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public bool DeleteEmployeeById(int Id)
{
string sql = "delete from Employee where ID = @Id";
return Db.Execute(sql.ToString(), new { Id = Id });
} /// <summary>
/// 执行多个语句返回多个结果
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public Tuple<int,IEnumerable<Employee>> ListGroupEmployee()
{
string sql = "select Count(*) from Employee select * from Employee";
Tuple<IEnumerable<int>, IEnumerable<Employee>> queryGroup = Db.Query<int, Employee>(sql, null);
return Tuple.Create<int, IEnumerable<Employee>>(queryGroup.Item1.FirstOrDefault(),queryGroup.Item2);
} }

除了没把事务加上之外其他的增删改查都有了,同时在传对象的时候Dapper也解决了sql注入的问题,在性能上也是比较好的ORM框架,需要的拿去!
Dapper的使用的更多相关文章
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...
- Dapper扩展之~~~Dapper.Contrib
平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...
- 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapp ...
- Dapper.Contrib:GetAsync<T> only supports an entity with a [Key] or an [ExplicitKey] property
异常处理:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 原来Model是这样滴 修改后是这样滴 注意点:Model里面的Table和Key ...
- Dapper where Id in的解决方案
简单记一下,一会出去有点事情~ 我们一般写sql都是==>update NoteInfo set NDataStatus=@NDataStatus where NId in (@NIds) Da ...
- ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)
操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...
- Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记
0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...
- 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】
前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...
- mono for android中使用dapper或petapoco对sqlite进行数据操作
在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...
- Dapper:The member of type SeoTKD cannot be used as a parameter Value
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 上次说了一下Dapper的扩展Dapper.Contrib http://www. ...
随机推荐
- 策略模式——MFC样例
Context(应用场景): 1.须要使用ConcreteStrategy提供的算法. 2.内部维护一个Strategy的实例. 3. 负责动态设置执行时Strategy详细的实现算法. 4.负责跟S ...
- ecshop 后台批量上传商品 完整上传
ecshop 后台批量上传商品,之所以无法上传,是因为后台上传php文件方法中没有导入商品原图路径 将ecshop根目录中的admin/goods_batch.php文件全部修改为 <?php ...
- spring.net中间IoC、DI和MVC
轮廓 spring.net它是开源的业务层框架,功能很强大,它归结到什么都有3能:面向切面编程:IoC和DI:提供综合型的框架支持,本片博客主要说一下IoC和DI.和其提供的对MVC框架的支持. Io ...
- hadoop-ha组态
HADOOP HA组态 hadoop2.x的ha组态.这份文件是在那里的描述中hdfs与yarn的ha组态. 这份文件的假设是zk它已被安装并配置,事实上,任何安装. hdfs ha组态 首先.配置c ...
- 辛格尔顿和Android
辛格尔顿(Singleton) .singleton.h,定义类的基本成员及接口 #ifndef SINGLETON_H_INCLUDE #define SINGLETON_H_INCLUDE cla ...
- php:修改NetBeans默认字体
在Netbeans中由于使用了Swing进行开发,所以其中界面的字体也是由Java虚拟机进行配置而不是随操作系统的.在安装完Netbeans后默认的字体大小是11px.而在Windows下的宋体最小支 ...
- Linux在高铁项目的部署环境
因为Linux和Java像开源.所以,现在在server基本上使用部署Linux平台即server.然后部署项目.在开发项目的过程中.程序员绝大多数仍采用最经典windows操作系统,尽管Linux也 ...
- SlopOne推荐算法
在开源框架taste中有SlopOne的Java实现,效果不错.使用movielens的数据,代码例如以下 代码 #coding:utf-8 import re import math #读取数据,并 ...
- win8/win10/win2012r2 存储池 冗余分析
StorageSpace:a. Simple,相当于RAID0,无冗余,不考虑b. Two-way Mirror,双重镜像,至少2块盘,性能单盘,可以坏一块盘c. Three-way Mirror,三 ...
- HDU 4828 (卡特兰数+逆)
HDU 4828 Grids 思路:能够转化为卡特兰数,先把前n个人标为0.后n个人标为1.然后去全排列,全排列的数列.假设每一个1的前面相应的0大于等于1,那么就是满足的序列,假设把0看成入栈,1看 ...