「dapper-dot-net」のトランザクション

architecture dapper data-access-layer

質問

DALがdapper-dot-netを使用している場合、どのようにトランザクションを作成しますか?

私のc#winformアプリケーションはネットワークで使用され、データはセントラルSQLサーバーに保存されます。

私のユースケースでは、トランザクションの使用が必要です。これをdapperを使ってやってもいいですか、あるいはNHibernateのようなものを使う必要がありますか?

また、ストアドプロシージャを使用している場合、このフレームワークにはリスクや制限がありますか?可能性のある制限のために私のアプローチを変更する必要がありますか?

受け入れられた回答

私はsprocsを使用することで何らかの制限に遭遇しておらず、あなたがsprocsで持っているのと同じリスクです

ここでは、dapperでトランザクションを使用する方法の簡単な例を示します

using (var connection = Db.GetConnection())
{
     connection.Open();
     IDbTransaction transaction = connection.BeginTransaction();
     try
     {
         var newId= connection.Query<int>(@"Select id from table1 where id=@id", new{id}, transaction).Single();
         connection.Execute(@"INSERT into table1 ...",new {p1, p2}, transaction);
         connection.Execute(@"INSERT into table2 ...",new {p1, p2}, transaction);
         transaction.Commit();
     }
     catch (Exception ex)
     {
         transaction.Rollback();
     }
}

エキスパート回答

dapperは、ado.netトランザクションと暗黙的トランザクションの両方を使用できます。 ADO.NETのトランザクションの場合、トランザクションを通常どおり作成し、メイン・メソッドで使用可能なtransactionパラメータを使用してtransactionを提供します。暗黙的なトランザクションの場合、通常はTransactionScope使用してください。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow