[英]how i can use transactions in dapper C#
我如何在 dapper C# 中使用事務。 我的問題是我需要鎖定一個表,所以我使用一個 BeginTransaction,我做其他事務,直到我完成這些事務,我才能提交,使用我向您展示的代碼。 它可以做到,但是當我同時收到 2 筆交易時,一筆交易不能很好地關閉連接。 謝謝。
我想這樣做,但要小巧玲瓏。
public int UpdateStan(PosDTO posParams)
{
int result = cnn.Execute(new Templates.Queries.upDateStan().TransformText(), new
{
id_merchant = posParams.idMerchant
}, transaction);
transaction.Commit();
cnn.Close();
cnn.Dispose();
return result;
}
public BatchStanDTO getBatchStan(PosDTO posDto)
{
cnn = _sodexoSource.Create();
cnn.Open();
transaction = cnn.BeginTransaction();
return cnn.Query<BatchStanDTO>(new Templates.Queries.getBatchStan().TransformText(), new { idMerchant = posDto.idMerchant }, transaction).FirstOrDefault();
}
public void rollbackTran()
{
try
{
transaction.Rollback();
}
catch (Exception ex)
{
}
}
您可以根據需要創建任意數量的交易,並使用 using 語句加入這些交易。 從當前連接獲取您的交易並執行類似的操作
using(var tranB= connection.BeginTransaction())
{
using(var tran = connection.BeginTransaction()) {
try {
// multiple operations involving connection and tran here
tran.Commit();
} catch {
tran.Rollback();
throw;
}
}
tranB.Commit();
}
您還可以使用 Dapper 事務。 它與 Dapper 相同,但擴展了您在代碼方面可能更喜歡的事務:
using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{
connection.Open();
using (var transaction = connection.BeginTransaction())
{
// Dapper
var affectedRows1 = connection.Execute(sql, new {CustomerName = "Mark"}, transaction: transaction);
// Dapper Transaction
var affectedRows2 = transaction.Execute(sql, new {CustomerName = "Mark"});
transaction.Commit();
}
}
代碼取自dapper-tutorial
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.