Dapper - Transaction

Description

Dapper support the transaction and TransactionScope

Transaction

Begin a new transaction from the connection and pass it in the transaction optional parameter.

  1. string sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";
  2. using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
  3. {
  4. connection.Open();
  5. using (var transaction = connection.BeginTransaction())
  6. {
  7. var affectedRows = connection.Execute(sql, new {CustomerName = "Mark"}, transaction: transaction);
  8. transaction.Commit();
  9. Console.WriteLine(affectedRows);
  10. }
  11. }

Try it: .NET Core | .NET Framework

TransactionScope

Begin a new transaction scope before starting the connection

  1. // using System.Transactions;
  2. using (var transaction = new TransactionScope())
  3. {
  4. var sql = "Invoice_Insert";
  5. using (var connection = My.ConnectionFactory())
  6. {
  7. connection.Open();
  8. var affectedRows = connection.Execute(sql,
  9. new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
  10. commandType: CommandType.StoredProcedure);
  11. }
  12. transaction.Complete();
  13. }

Dapper Transaction

Dapper Transaction is exactly like Dapper but extend the IDbTransaction interface instead and use Dapper under the hood.

It’s a simple library to make it easier to work with a transaction.

Everything Dapper support, Dapper Transaction support it as well (It’s only new extension method calling Dapper)

NuGet: https://www.nuget.org/packages/Dapper.Transaction/

GitHub: https://github.com/zzzprojects/Dapper.Transaction

  1. using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
  2. {
  3. connection.Open();
  4. using (var transaction = connection.BeginTransaction())
  5. {
  6. // Dapper
  7. var affectedRows1 = connection.Execute(sql, new {CustomerName = "Mark"}, transaction: transaction);
  8. // Dapper Transaction
  9. var affectedRows2 = transaction.Execute(sql, new {CustomerName = "Mark"});
  10. transaction.Commit();
  11. }
  12. }