Sto usando un modello di repository generico in asp.net mvc. Ho familiarità con il modello di repository ma non con Unit of work. Sto leggendo diversi articoli di Google su questo. Ma non sono sicuro se uso unità di lavoro con asp.net mvc, dove dovrei usare il metodo Commit () che chiamerà il metodo ef SaveChanges ()? Lo userò a livello di repository o livello di servizio o in Controller. Inoltre, molti altri stanno dicendo che Microsoft sta già utilizzando l'unità di lavoro integrata con Entity Framework. Quindi non è necessario usarlo separatamente o usarlo a livello di controller o ovunque?
Grazie, Abdus Salam Azad.
Sì, devi farlo all'interno della classe 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;
}
}
}
}
Successivamente è possibile chiamare il metodo Commit
di UnitOfWork all'interno del livello di servizio .
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
}
}
Puoi saperne di più su questo modello: Repository generico e Pattern Unità di lavoro