Я использую шаблон работы для первого подхода к базе данных EF в моем приложении. Я также реализовал транзакции базы данных в единицах рабочего класса. Например,
public class UnitOfWork : IUnitOfWork
{
private myDBContext _dBContext;
public IDatabaseTransaction BeginTransaction()
{
return new EntityDatabaseTransaction(_dBContext);
}
}
Теперь у меня есть обработчики для различных операций, и у каждого обработчика есть внедрение зависимости единицы работы. Внутри обработчиков я использую транзакции для работы с БД. Например,
public class Operation1Handler : BaseHandler
{
IUnitOfWork _unitOfWork;
public Operation1Handler(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public override void Handle()
{
using(var _trans = _unitOfWork.BeginTransaction())
{
//some code
_unitOfWork.Entity.SaveAsync();
_trans.Commit();
}
}
}
Теперь этот обработчик вызывается в методе WebAPI, подобном
public void MyAPI()
{
var handler = new Operation1Handler();
handler.Handle();
}
. Пока все работает отлично. Теперь моя проблема заключается в том, что мне нужно вызвать 2 разных обработчика в методе WebAPI, который будет выполнять разные операции с БД. Но я хочу, чтобы все операции под обоими обработчиками были совместимы с транзакциями, т. Е. Если операция обработчика 2 завершается с ошибкой, операция обработчика 1 также должна откатываться.
public void MyAPI()
{
var handler = new Operation1Handler();
handler.Handle();
var handler2 = new Operation2Handler();
handler2.Handle();
}
Может ли кто-нибудь помочь мне достичь этого.