Я использую эту базовую структуру:
using(IDataContext ctx = DataContext.Instance())
{
try{
ctx.BeginTransaction();
ctx.Commit();
}
catch(Exception)
{
ctx.RollbackTransaction();
throw;
}
}
То, что я хотел бы сделать, это вкладывать транзакции, чтобы можно было строить с использованием функционального программирования.
Очень упрощенная версия:
public void DoSomething(){
using(IDataContext ctx = DataContext.Instance())
{
try{
ctx.BeginTransaction();
// make a change to the data
ctx.Commit();
}
catch(Exception)
{
ctx.RollbackTransaction();
throw;
}
}
}
public void CallingFunction(){
using(IDataContext ctx = DataContext.Instance())
{
try{
ctx.BeginTransaction();
//do some stuff
DoSomething();
//do some other stuff
ctx.Commit();
}
catch(Exception)
{
ctx.RollbackTransaction();
throw;
}
}
}
Поэтому я хочу иметь возможность иметь несколько CallingFunctions, которые все вызывают DoSomething (), но если в коде, который появляется в CallingFunction после DoSomething, возникает исключение, то я хочу, чтобы DoSomething откатывалсятакже.
DoSomething может быть в том же классе, что и CallingFunction, или в другом классе.
Конечно, это возможно, но я не смог найти ответ.Спасибо за вашу помощь.
После проверки моего кода я понял, что он использует DataContext из пространства имен DotNetNuke.Data.Может быть, эксперт DNN может помочь?