用asp.net mvc将savechanges放在工作单元模式中的哪里?

时间:2016-10-15 13:05:30

标签: entity-framework asp.net-mvc-4 entity-framework-6 razor-2

我在asp.net mvc中使用通用存储库模式。我熟悉存储库模式,但不熟悉工作单元。我正在阅读谷歌关于此的几篇文章。但我不确定我是否使用asp.net mvc的工作单元,我将使用将调用ef SaveChanges()方法的Commit()方法?我会在存储库层或服务层或Controller中使用它吗?此外,许多其他人都说,微软已经在使用Entity Framework内置的工作单元。所以不需要单独使用它或使用控制器级别或任何地方?

谢谢, Abdus Salam Azad。

2 个答案:

答案 0 :(得分:1)

是的,您必须在UnitOfWork.cs班级内完成。

<强> UnitOfWork.cs

 public sealed class UnitOfWork : IUnitOfWork
   {

       private DbContext _dbContext;

       public UnitOfWork(DbContext context)
       {         
          _dbContext = context;
       }

       public int Commit()
       {
           return _dbContext.SaveChanges();// Save changes 
       }

       public void Dispose()
       {
           Dispose(true);
           GC.SuppressFinalize(this);
       }

      private void Dispose(bool disposing)
       {
           if (disposing)
           {
               if (_dbContext != null)
               {
                   _dbContext.Dispose();
                   _dbContext = null;
               }
           }
       }
   }

之后,您可以在服务层中调用UnitOfWork的Commit方法。

<强> EntityService.cs

public abstract class EntityService<T> : IEntityService<T> where T : BaseEntity
   {
       IUnitOfWork _unitOfWork;
       IGenericRepository<T> _repository;

       public EntityService(IUnitOfWork unitOfWork, IGenericRepository<T> repository)
       {
           _unitOfWork = unitOfWork;
           _repository = repository;
       }  

     public virtual void Create(T entity)
           {
               _repository.Add(entity);
               _unitOfWork.Commit(); //saving point        
           }

}

您可以详细了解此模式:Generic Repository and Unit of Work Pattern

答案 1 :(得分:0)

如果您对同一笔交易有多项操作。然后,在完成所有操作之后,您最终需要将savechanges()放入。如果成功,则所有操作将成功;如果失败,则所有操作将失败并还原。

            _employeeService.UpdateVehicleDetail(model);
            _employeeService.UpdateLicenseDetail(model);
            await CurrentUnitOfWork.SaveChangesAsync();