我知道dbcontext本质上是一个存储库和工作单元模式。
然而,作为一个抽象,假设我实现了一个通用的存储库模式,带有工作单元模式,那么这可以处理这样的情况:假设作者和书被插入,其中一个失败了,那么两者都不会被插入。
现在假设我不使用工作单元模式,那么在使用通用存储库模式时,处理事务行为的替代方法是什么?
您可以在存储库之外使用事务范围
如果您的代码从未到达对Complete((的调用,并且作用域已被释放,则事务将中止,并将发生回滚。
using var scope = new TransactionScope(
TransactionScopeOption.Required,
new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted },
TransactionScopeAsyncFlowOption.Enabled);
authorRepository.Add(author);
bookRepository.Add(book);
scope.Complete();
但是,为什么不将请求范围的UnitOfWork注入到您的每个存储库中,并让它为您包装和处理事务呢?