[英]How to manage ado.net transaction
我不確定在代碼中管理此事務的好方法是什么。
說我有以下內容
服務層(非靜態類)存儲庫層(靜態類)
//服務層類
/// <summary>
/// Accept offer to stay
/// </summary>
public bool TxnTest()
{
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
conn.Open();
SqlTransaction txn = conn.BeginTransaction();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.Transaction = txn;
try
{
DoThis(cmd);
DoThat(cmd);
txn.Commit();
}
catch (SqlException sqlError)
{
txn.Rollback();
}
}
}
}
// Repo Class
/// <summary>
/// Update Rebill Date
/// </summary>
public static void DoThis(SqlCommand cmd)
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@SomeParam", 1);
cmd.CommandText = "Select * from sometable1";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
/// <summary>
/// Update Rebill Date
/// </summary>
public static void DoThat(SqlCommand cmd)
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@SomeParam", 2);
cmd.CommandText = "Select * from sometable2";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
您可能想看一下工作單元模式 。
工作單元模式准確地定義了它所建議的內容,即一次性提交或根本不提交的工作單元。
這通過定義具有兩個部分的接口來實現:
然后,您將傳遞此接口的實現,並在所有操作完成時在外部邊界(您的服務)提交更改。
請注意,LINQ-to-Entities中的ObjectContext
類和LINQ-to-SQL中的DataContext
類都是工作單元的示例(您執行操作然后將它們保存在批處理中)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.