我目前有關於TransactionScope對象的構造函數的混淆。TransactionScopeOption - 必需或需要新的
說我的網站的用戶可以訂購產品。在提交他們的請求時,我對剩餘的當前數量進行驗證,如果它仍然大於零,我執行請求。然後,最後我減少剩下的當前數量。
整個過程在一個事務中,使用.NET transactionScope。
在閱讀了關於.NET transactionScope對象的幾篇文章之後,我現在對用於transactionScope的構造函數的TransactionScopeOption的值感到困惑。
下列哪一個更適合於上述情況:
public void ProcessRequest()
{
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.Serializable;
using (TransactionScope currentScope = new TransactionScope(TransactionScopeOption.RequiresNew, transactionOptions)) {
// DB Query to verify if quantity is still greater than zero
// DB Query to request and decrement quantity
currentScope.Complete();
}
}
OR
public void ProcessRequest()
{
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.Serializable;
using (TransactionScope currentScope = new TransactionScope(TransactionScopeOption.Required, transactionOptions)) {
// DB Query to verify if quantity is still greater than zero
// DB Query to request and decrement quantity
currentScope.Complete();
}
}
注意的是,以上只是一個在我的實際問題簡化。我只想知道這種情況下TransactionScopeOption的正確值(RequiresNew或必需)。
感謝您的回覆。
在我的情況下,ProcessRequest本身的方法永遠不會參與另一個事務。 我只希望保證請求執行後: 「DB查詢,以驗證是否量仍大於零」 由它執行時間: 「DB查詢請求和遞減量」 由於另一個請求,數量尚未達到零,執行相同的方法ProcessRequest。 所以,我猜默認值:TransactionScope.Required對我來說是正確的值。 – 2011-01-07 19:37:41