Cześć, zastanawiam się czy idzie zrobić w C# "hierarchię" transakcji, która polegałaby na tworzeniu "transakcji dzieci" i ich commitowanie/rollbackowanie. Chodzi mi o takie coś:
var context = new TestDbContext("name=Default");
using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
{
context.Accounts.Add(new Account { Name = "Top" });
context.SaveChanges();
// Pierwsza transakcja "dziecko", która się nie udała ale widzi wsystkie zmiany z górnej transakcji
try
{
using (var child1 = CreateChildTransactionBasedOnParent(scope))
{
context.Accounts.Add(new Account { Name = "Child1" });
context.SaveChanges();
var all = context.Accounts.ToList(); // all zawiera Account z nazwą Top i Child1
throw new Exception("Error"); // error powinien spowodować rollback tylko i wyłącznie transakcji 'child1'
}
}
catch (Exception ex) { }
// Druga transakcja "dziecko", która się uda
try
{
using (var child2 = CreateChildTransactionBasedOnParent(scope))
{
context.Accounts.Add(new Account { Name = "Child2" });
context.SaveChanges();
var all = context.Accounts.ToList(); // all zawiera Account z nazwą Top i Child2
child2.Complete()
}
}
catch (Exception ex) { }
scope.Complete();
Ostatecznie w bazie danych byłyby dwa rekordy z nazwą "Top" i "Child2". Idzie coś takiego osiągnąć?