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