1
私は、トランザクションでDapperを正しく使用する方法を理解しようとしています。しかし、私はまだ私が何か間違っていると思う。私が見つけたすべての例は、非同期を使用していません。Dapper非同期とトランザクション
誰かが私にそれを正しく行う方法をアドバイスできますか?
class DapperAsyncTransaction
{
private readonly IDbConnection _dbConnection;
private IDbTransaction _dbTransaction;
private IDbConnection Connection => _dbTransaction.Connection;
/// <summary>
/// Constructor
/// </summary>
/// <param name="dbConnection"></param>
public DapperAsyncTransaction(
IDbConnection dbConnection)
{
_dbConnection = dbConnection;
_dbConnection.Open();
_dbTransaction = _dbConnection.BeginTransaction();
}
public async Task Execute()
{
try
{
await Connection.ExecuteAsync(
@"insert into Persons(Name, Surname) values" +
"(@Name, @Surname)",
param: new { Name = "John", Surname = "Doe" },
transaction: _dbTransaction);
_dbTransaction.Commit();
}
catch (Exception)
{
_dbTransaction.Rollback();
}
finally
{
_dbTransaction.Dispose();
_dbTransaction = _dbConnection.BeginTransaction();
}
}
}
なぜそれが間違っていると説明しますか?この例は、 'Persons'のトリガーが関与しない限り、あなた自身の暗黙的なトランザクション(MSSQLを前提としています)ですでに動作する単一の操作を行っているだけなので、 – Crowcoder