Şu anda TransactionScope nesnesinin kurucusuyla ilgili bir karışıklık yaşıyorum.İşlemScopeOption - Gerekli veya GerekenlerNew
Web sitemdeki kullanıcıların ürünleri sipariş edebileceğini varsayalım. Taleplerini sunarken, mevcut miktarın sola doğru bir şekilde yapıldığını ve eğer hala sıfırdan büyükse, talebi yerine getiriyorum. Daha sonra, mevcut miktarı bırakıyorum.
Tüm işlem, .NET transactionScope kullanarak bir işlem içerisindedir.
.NET transactionScope nesnesinde birkaç makale okuduktan sonra, işlemScope yapıcısı için kullanılacak TransactionScopeOption değeri hakkında biraz kafam karıştı.
aşağıdakilerden biri yukarıda anlatılan durum için daha uygundur hangisi:
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();
}
}
VEYA
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();
}
}
Not Yukarıdaki sadece benim gerçek sorun basitleştirilmesi sona erdiğini söyledi. Ben sadece böyle bir durumda TransactionScopeOption (RequiredNew veya Gerekli) doğru değeri bilmekle ilgileniyorum.
Yanıtladığınız için teşekkür ederiz. Eğer ProcessRequest
TransactionScope.Required
kullanın SomeOtherMethod
yarattığı işlem kullanmak istiyorsanız
public void SomeOtherMethod() {
using (TransactionScope ts = new TrasansctionScope()) {
// Another DB action
ProcessRequest();
// Yet another DB action
}
}
:
Benim durumumda, ProcessRequest yöntemi hiçbir zaman başka bir işlemin içine katılmayacaktır. Ben sadece bir istek yürütür sonra emin olmak için arıyorum: "istek ve eksiltme miktara DB Sorgusu" : Yürüttüğü zaman "miktarı hala O'dan büyük olup olmadığını DB Sorgusu doğrulamak için" , miktar başka bir istek nedeniyle henüz sıfıra ulaşmadı, aynı yöntemi ProcessRequest yürütme. Yani, varsayılan: TransactionScope.Required benim için doğru değerdir. –
Kesinlikle - aksi takdirde (istemeden), kendi işlemini kullanmak için gerekli olan ProcessRequest hakkında özel bir şey olduğunu ima ederdiniz. –
Tamam. Hızlı cevap için teşekkürler. –