UnitOfWork+EF IRepository 事务处理

UnitOfWork 中的事务处理

在 UnitOfWork + EF IRepository模式下,不能直接用TransactionScope处理事务,会报错,提示需要设置什么分布式事务管理器

UnitOfWork 已有关于事务的处理

关键代码
   UnitOfWork.TransactionEnabled = true;//启用事务
   // code...
   UnitOfWork.SaveChanges();  // 提交保存到数据库,不执行是不会保存到数据库的
IUnitOfWork 接口
 public interface IUnitOfWork : IDependency
    {
        bool TransactionEnabled { get; set; }
        bool ProxyCreationEnabled { get; set; } 

        int ExecuteSqlCommand(TransactionalBehavior transactionalBehavior, string sql, params object[] parameters);
        Task ExecuteSqlCommandAsync(TransactionalBehavior transactionalBehavior, string sql, params object[] paramters);
        int SaveChanges();
        Task SaveChangesAsync();
        IEnumerable SqlQuery(string sql, params object[] parameters);
        IEnumerable SqlQuery(Type elementType, string sql, params object[] parameters);
    }

可以看到这里关于事务的设置:

bool TransactionEnabled { get; set; }
int SaveChanges();

使用示例:

 public IRepository AccountRepository { get; set; }

 var accountId = 1;
 AccountRepository.UnitOfWork.TransactionEnabled = true;
 if (projectAccount != null)
 {
       // to do something...
     AccountRepository.Delete(accountId);
 }
 ProjectAccountRepository.UnitOfWork.SaveChanges();

你可能感兴趣的:(C#,.NET)