壮心未与年俱老,死去犹能作鬼雄。这篇文章主要讲述[译]Dapper教程相关的知识,希望能为你提供帮助。
原文:Dapper Tutorial ,获取更好浏览体验请跳转到GitBook[点击访问]。什么是DapperDapper是一个简单的.NET对象映射器,在速度方面具有"King of Micro ORM"的头衔,几乎与使用原始的ADO.NET数据读取器一样快。ORM是一个对象关系映射器,它负责数据库和编程语言之间的映射。
Dapper通过扩展
IDbConnection
提供一些有用的扩展方法去查询您的数据库。Dapper是如何工作的它可以分为三个步骤:
- 创建一个
IDbConnection
接口对象; - 编写一个查询SQL来执行CRUD操作;
- 将查询SQL作为
Execute
方法的参数传递。
PM>
Install-Package Dapper
要求Dapper可以与任何数据库提供者一起工作,因为没有数据库特定的实现。
方法Dapper会用以下几个方法扩展您的
IDbConnection
接口:- Execute
- Query
- QueryFirst
- QueryFirstOrDefault
- QuerySingle
- QuerySingleOrDefault
- QueryMultiple
string sqlInvoices = "SELECT * FROM Invoice;
";
string sqlInvoice = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;
";
string sp = "EXEC Invoice_Insert";
using (var connection = My.ConnectionFactory())
{
// 执行普通SQL
var invoices = connection.Query<
Invoice>
(sqlInvoices).ToList();
// 执行带参数的SQL
var invoice = connection.QueryFirstOrDefault(sqlInvoice, new {InvoiceID = 1});
// 执行存储过程
var affectedRows = connection.Execute(sp, new { Param1 = "Single_Insert_1" }, commandType: CommandType.StoredProcedure);
}
参数执行和查询方法可以用以下几种不同的方式使用参数:
- 匿名类型
- 动态类型
- 列表类型
- 字符串类型
// Anonymous
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure);
// Dynamic
DynamicParameters parameter = new DynamicParameters();
parameter.Add("@Kind", InvoiceKind.WebInvoice, DbType.Int32, ParameterDirection.Input);
parameter.Add("@Code", "Many_Insert_0", DbType.String, ParameterDirection.Input);
parameter.Add("@RowCount", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure);
// List
connection.Query<
Invoice>
(sql, new {Kind = new[] {InvoiceKind.StoreInvoice, InvoiceKind.WebInvoice}}).ToList();
// String
connection.Query<
Invoice>
(sql, new {Code = new DbString {Value = "https://www.songbingjia.com/android/Invoice_1", IsFixedLength = false, Length = 9, IsAnsi = true}}).ToList();
结果查询方法返回的结果可以映射到以下几种类型:
- 匿名类型
- 强类型
- 多映射
- 多结果
- 多类型
string sql = "SELECT * FROM Invoice;
";
using (var connection = My.ConnectionFactory())
{
connection.Open();
var anonymousList = connection.Query(sql).ToList();
var invoices = connection.Query<
Invoice>
(sql).ToList();
}
工具
- 异步
- 缓冲
- 事务
- 存储过程
// Async
connection.QueryAsync<
Invoice>
(sql)// Buffered
connection.Query<
Invoice>
(sql, buffered: false)// Transaction
using (var transaction = connection.BeginTransaction())
{
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure,
transaction: transaction);
transaction.Commit();
}// Stored Procedure
var affectedRows = connection.Execute(sql,
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
commandType: CommandType.StoredProcedure);
作者:Esofar
出处:http://www.cnblogs.com/esofar/p/dapper.html
【[译]Dapper教程】本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
分类: .NET技术
推荐阅读
- servlet-mapping url-pattern / 和 /*区别
- Android 平板中 自己定义键盘(popuwindow) 居于屏幕左下方 仿微信的password输入界面
- 解决Android Studio 3.0导入module依赖后unable to merge index
- Android studio 3.0安装MUMU模拟器
- [LeetCode] Find Anagram Mappings 寻找异构映射
- 《Android进阶之光》--Dagger2
- 《Android进阶之光》--事件总线
- jQuery中append appendTo prepend prependTo insertBefore insertAfter after before之间的区别
- android studio gradle统一管理版本