[英]Calling TransactionScope.Complete when executing multiple sql statements in DAL
我正在閱讀此書,似乎不需要調用scope.Complete可以使以下代碼正常工作。
當我嘗試在不使用scope.Complete()的情況下運行此記錄時,記錄將保存到數據庫中。 如果scope.Complete()存在,則記錄將保存,並且一切正常。
public static void SaveProducts(IList<Product> products)
{
using (TransactionScope scope = new TransactionScope())
{
using (var connection = GetOpenConnection())
{
StringBuilder sqlDelete = new StringBuilder();
sqlDelete.AppendLine("MY SQL STATEMENT HERE ");
StringBuilder sqlInsert = new StringBuilder();
sqlInsert.AppendLine("MY SQL STATEMENT HERE ");
connection.Execute(sqlDelete.ToString(), new { CategoryId = categoryId });
connection.Execute(sqlInsert.ToString(), products);
}
scope.Complete();
}
}
我將在此處添加它,希望有更多的人閱讀
即使代碼中沒有更改數據庫的內容,也必須調用scope.Complete()。 如果您只是讀取數據庫,甚至不觸摸數據庫,請調用scope.Complete()
毫無疑問,何時應調用scope.Complete()或是否應調用scope.Complete()。 必須在退出TransactionScope using語句之前,或者如果范圍是手動創建的,則必須在調用Dispose()之前調用它。
如果您沒有這種習慣,請開始考慮代碼中正在發生的事情以及是否應該調用scope.Complete(),您的代碼將開始以隨機方式運行,無法提交,有時會提交(如果存在)如果是嵌套事務,則會看到它們失敗;如果存在多個鏈接的事務,那么您也會看到它們失敗。
確保無論如何都調用scope.Complete。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.