Dapper公式ドキュメント(1)[はじめに]

ダッパーとは

Dapperはシンプルな.NETオブジェクトマッパーであり、速度の点で「King of Micro ORM」というタイトル付いており、元のADO.NETデータリーダーを使用するのとほぼ同じくらい高速です。ORMはオブジェクトリレーショナルマッパーであり、データベースとプログラミング言語の間のマッピングを行います。

DapperIDbConnectionあなたのデータベースを照会するために、いくつかの便利な拡張メソッドを提供する拡張を介して

Dapperの仕組み

それは3つのステップに分けることができます:

  • IDbConnectionインターフェイスオブジェクトを作成します。
  • CRUD操作を実行するクエリSQLを記述します。
  • クエリSQLをExecuteメソッドパラメータとして渡します。

インストール

DapperNuGet経由でインストール: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);

おすすめ

転載: blog.csdn.net/WuLex/article/details/108278536