In meiner Anwendung habe ich zwei Methoden: GetPaymentToDate
und RemovePayment
:Update-Datenbank mit verschachtelten Transaktionen Umfang
public Payment RemovePayment(int paymentId)
{
Payment payment;
using (var transaction = new TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }))
{
//some staff
m_staffContext.SaveChanges();
transaction.Complete();
}
return payment;
}
public Payment GetPaymentToDate(DateTime paymentDate)
{
var payment = new Payment
{
//initialize properties
};
using (var transaction = new TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }))
{
m_staffContext.Payments.Add(payment);
m_staffContext.SaveChanges();
transaction.Complete();
}
return payment;
}
Nein Ich aktualisieren Methode implementieren müssen. Die Logik dieser Methode besteht darin, die alte zu entfernen und dann eine neue Zahlung zu erstellen. Also möchte ich es in einem übergeordneten Transaktionsbereich tun und eine geschachtelte Transaktion zurückrollen, wenn die andere fehlgeschlagen ist. Ich werde TransactionScopeOption.RequiresNew
Option aus bestehenden Methoden löschen und in Update-Methode schreiben Sie etwas wie folgt aus:
public Payment UpdatePayment(int paymentId)
{
Payment newPayment;
using (var transaction = new TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }))
{
var removedPayment = RemovePayment(paymentId);
var newPayment = GetPaymentToDate(removedPayment.Date);
m_staffContext.SaveChanges();
transaction.Complete();
}
return newPayment;
}
Bin ich mit meinem Code korrekt?
Warum haben Sie 'RequiresNew' mit jedem Transaktionsbereich? Der Standardwert ist in Ordnung. – Maarten