我在我的应用程序中将工作单元模式用于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();
}
到目前为止,这一切都很好。 现在我的问题是我必须在WebAPI方法中调用2个不同的处理程序,这将执行不同的数据库操作。但是我希望两个处理程序下的所有操作都符合事务规范,即,如果处理程序2的操作失败,那么处理程序1的操作也应回滚。
public void MyAPI()
{
var handler = new Operation1Handler();
handler.Handle();
var handler2 = new Operation2Handler();
handler2.Handle();
}
任何人都可以帮助我实现这一目标。
答案 0 :(得分:0)
我认为,在配置DI时,应将IUnitOfWork的生命周期确定为范围。使用AddScoped方法代替AddTransient
我同意@Rabban的评论。不要手动开始交易