ダッパーとは
Dapperはシンプルな.NETオブジェクトマッパーであり、速度の点で「King of Micro ORM」というタイトルが付いており、元のADO.NET
データリーダーを使用するのとほぼ同じくらい高速です。ORMはオブジェクトリレーショナルマッパーであり、データベースとプログラミング言語の間のマッピングを行います。
Dapper
IDbConnection
あなたのデータベースを照会するために、いくつかの便利な拡張メソッドを提供する拡張を介して。
Dapperの仕組み
それは3つのステップに分けることができます:
IDbConnection
インターフェイスオブジェクトを作成します。- CRUD操作を実行するクエリSQLを記述します。
- クエリSQLを
Execute
メソッドパラメータとして渡します。
インストール
Dapper
NuGet経由でインストール:https : //www.nuget.org/packages/Dapper
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 = "Invoice_1", IsFixedLength = false, Length = 9, IsAnsi = true}}).ToList();
結果
queryメソッドによって返される結果は、次のタイプにマップできます。
- 匿名型
- ストロングタイプ
- 複数のマッピング
- 複数の結果
- 複数のタイプ
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);