以下是我的代碼。我想知道它是真的還是不是。使用實體框架的存儲庫模式
public interface IRepository<T> : IDisposable
{
IQueryable<T> GetAll();
T Update(T entity);
T Insert(T entity);
T GetById(T entity);
void Delete(T entity);
void Save();
}
public class Repository<T> : IRepository<T> where T : class
{
private readonly SchoolDBEntities _context;
public Repository(SchoolDBEntities context)
{
_context = context;
}
public IQueryable<T> GetAll()
{
return _context.Set<T>();
}
public T Update(T entity)
{
var result = _context.Set<T>().Attach(entity);
_context.Entry(entity).State = EntityState.Modified;
return result;
}
public T Insert(T entity)
{
return _context.Set<T>().Add(entity);
}
public T GetById(T entity)
{
return _context.Set<T>().Find(entity);
}
public void Delete(T entity)
{
_context.Set<T>().Remove(entity);
}
public void Save()
{
_context.SaveChanges();
}
public void Dispose()
{
_context.Dispose();
}
}
的問題是,我不知道何時何地撥打Save
和Dispose
方法。
有什麼好處?我可以在存儲庫中編寫這些代碼 – samira
通常,您將遇到需要從2個或更多存儲庫調用方法的場景。所以,你將不得不使用(_cartRepository){}'和'using(_productRepository){}',這裏基本上你打開和關閉了數據庫連接兩次,這可以避免使用UnitOfWork模式,像這樣'using(_unitOfWork ) { var p = _unitOfWork.ProductRepository.SingleOrDefault(p => p.Id == productId); _cartRepository.Add(p); _unitOfWork.Save(); }' – sunil
您的評論應該是答案的一部分,以在您的答案背後添加推理。 – maulik13