Dapperの非同期メソッドの使用方法

5608 ワード

Dapperは使いやすく、軽量級で、柔軟で効率的で、オープンソースの 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の非同期メソッドリストである.
  • ExecuteAsync
  • QueryAsync
  • QueryFirstAsync
  • QueryFirstOrDefaultAsync
  • QuerySingleAsync
  • QuerySingleOrDefaultAsync
  • QueryMultipleAsync

  • プレゼンテーションの目的のために,前の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