Dapperの非同期メソッドの使用方法
5608 ワード
Dapperは使いやすく、軽量級で、柔軟で効率的で、オープンソースの
Dapperのインストール
Visual Studio 2019 IDEのNuGet package managerビジュアル化インタフェースでインストールするか、.NET CLIコマンドラインに以下のコマンドを入力できます.
パッケージがプロジェクトに正常にインストールされると、正式に使用できます.
非同期メソッドの使用
Dapperは、CURD操作を非同期で実行するために使用できるいくつかの非同期メソッドを提供し、以下はDapperの非同期メソッドリストである. ExecuteAsync QueryAsync QueryFirstAsync QueryFirstOrDefaultAsync QuerySingleAsync QuerySingleOrDefaultAsync QueryMultipleAsync
プレゼンテーションの目的のために,前の2つの非同期方法を用いてプレゼンテーションを行った.
QueryAsyncとExecuteAsync
Authorエンティティクラスの作成
次にIAuthorRepositoryインタフェースを作成します
インタフェースがあれば、クラスを定義してこのインタフェースを実現することができます.
QueryAsyncメソッドを使用してSqlServerの非同期クエリーを実現したことに注意してください.次に、非同期メソッドInsertを入力します.
ExecuteAsync法は、
データベース接続への依存注入
接続データベースのConnectionStringを
次に、依存注入メカニズムを使用して、次のコードに示すように、IConfigurationインスタンスをAuthorRepositoryに注入する.
次のコードクリップでは、SqlConnectionインスタンスを作成する方法を示します.
このDbConnectionプロパティは、以前のInsertメソッドで使用されていたSqlConnectionによって作成されたデータベース接続の代わりに使用できます.改造されたInsertメソッドは次のようになります.
IOC容器にrepositoryを追加
後続の
Controllerでのrepositoryの使用
次に、IAuthorRepositoryインスタンスを注入に依存してAuthorControllerに注入し、次のコードフラグメントは実装方法を示す.
次に、ActionでAuthorRepositoryインスタンスを使用してAuthorインスタンスデータを取得する方法について説明します.
これが本編のすべての内容です.ところで、Dapperを使用してより高度なクエリーを実現したい場合は、
翻訳リンク:
https://www.infoworld.com/art...
もっと高品質の乾物:私のGitHubを参照:csharptranslate
ORM
で、Stack OverflowチームのSam Saffronが出品しています.Dapperを利用してデータアクセスを簡素化し、高性能をサポートすることができます.また、Dapperは多くの非同期方法を提供しています.本編では、ASP.NET CoreでDapperを使用する方法についてお話しします.Dapperのインストール
Visual Studio 2019 IDEのNuGet package managerビジュアル化インタフェースでインストールするか、.NET CLIコマンドラインに以下のコマンドを入力できます.
dotnet add package Install-Package Dapper
パッケージがプロジェクトに正常にインストールされると、正式に使用できます.
非同期メソッドの使用
Dapperは、CURD操作を非同期で実行するために使用できるいくつかの非同期メソッドを提供し、以下はDapperの非同期メソッドリストである.
プレゼンテーションの目的のために,前の2つの非同期方法を用いてプレゼンテーションを行った.
QueryAsyncとExecuteAsync
Authorエンティティクラスの作成
public class Author
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
}
次にIAuthorRepositoryインタフェースを作成します
public interface IAuthorRepository
{
Task GetByID(int id);
public Task Insert(Author model);
}
インタフェースがあれば、クラスを定義してこのインタフェースを実現することができます.
public class AuthorRepository
{
private readonly IConfiguration _config;
public AuthorRepository(IConfiguration config)
{
_config = config;
}
public async Task GetByID(int id)
{
using (IDbConnection conn = new SqlConnection(_config.GetConnectionString("IDGDbConnectionString")))
{
string query = "SELECT Id, FirstName, LastName,Address FROM Author WHERE Id = @id";
conn.Open();
var result = await conn.QueryAsync(
query, new { Id = id });
return result.FirstOrDefault();
}
}
public async Task Insert(Author model)
{
return false;
}
}
QueryAsyncメソッドを使用してSqlServerの非同期クエリーを実現したことに注意してください.次に、非同期メソッドInsertを入力します.
public async Task Insert(Author model)
{
int x = -1;
using (var connection = new SqlConnection(_config.GetConnectionString("IDGDbConnectionString")))
{
await connection.OpenAsync();
var sqlStatement = @"INSERT INTO Author (FirstName, LastName, Address)";
x = await connection.ExecuteAsync(sqlStatement, model);
}
return x > 0;
}
ExecuteAsync法は、
sql
であり、
である2つのパラメータを受信することが分かる.データベース接続への依存注入
接続データベースのConnectionStringを
appSettings.json
ファイルに配置し、IConfigurationインスタンスのGetConnectionString()メソッドを使用してConenctionStringを取得できます.次に、依存注入メカニズムを使用して、次のコードに示すように、IConfigurationインスタンスをAuthorRepositoryに注入する.
public class AuthorRepository : IAuthorRepository
{
private readonly IConfiguration _config;
public EmployeeRepository(IConfiguration config)
{
_config = config;
}
//Other methods
}
次のコードクリップでは、SqlConnectionインスタンスを作成する方法を示します.
public IDbConnection DbConnection
{
get
{
return new SqlConnection(_config.GetConnectionString("IDGDbConnectionString"));
}
}
このDbConnectionプロパティは、以前のInsertメソッドで使用されていたSqlConnectionによって作成されたデータベース接続の代わりに使用できます.改造されたInsertメソッドは次のようになります.
public async Task Insert(Author model)
{
int x = -1;
using (var connection = DbConnection)
{
await connection.OpenAsync();
var sqlStatement = @"INSERT INTO Author (FirstName, LastName, Address)";
x = await connection.ExecuteAsync(sqlStatement, model);
}
return x > 0;
}
IOC容器にrepositoryを追加
後続の
のために、ここではまずrepositoryをIOCに追加します.
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient();
//Other code
}
Controllerでのrepositoryの使用
次に、IAuthorRepositoryインスタンスを注入に依存してAuthorControllerに注入し、次のコードフラグメントは実装方法を示す.
[Route("api/[controller]")]
[ApiController]
public class AuthorController : ControllerBase
{
private readonly IAuthorRepository _authorRepository;
public AuthorController(IAuthorRepository authorRepository)
{
_authorRepository = authorRepository;
}
//Action methods
}
次に、ActionでAuthorRepositoryインスタンスを使用してAuthorインスタンスデータを取得する方法について説明します.
[HttpGet]
[Route("{id}")]
public async Task> GetByID(int id)
{
return await _authorRepository.GetByID(id);
}
これが本編のすべての内容です.ところで、Dapperを使用してより高度なクエリーを実現したい場合は、
DapperExtensions
を検討してgithub:https://github.com/tmsmith/Da...を参照してください.翻訳リンク:
https://www.infoworld.com/art...
もっと高品質の乾物:私のGitHubを参照:csharptranslate