簡體   English   中英

我如何在 dapper C# 中使用事務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM