我应该只使用这5种方法吗?或者我的存储库应该显示我需要的所有 sql 方法。也许我误解了这些例子。我应该 FindByID 和 FindAll 吗?例如,如果我有 5 个下拉菜单。我有5个方法,或者我可能有一个方法,5个查询,返回1个表并绑定到0-4个表。
我试过的,是网上的几节课和几篇文章,我仍然觉得这些例子过于简化了。或者,我正在编写太多方法来查询数据库。顺便说一句,我正在从线性开发转向存储库和工厂。所以,我的转变是基于理解这一点,然后我将转向 EF 和 MVC。
public interface IRepository<T> where T: IEntity
{
void Insert(Student student);
void Delete(Student student);
void Update(Student student);
Student GetById(Student RollNo);
IQueryable<Student> FetchAll();
}
对于在您的存储库上具有一组标准 CRUD 操作的简单实体和聚合来说很有意义。但是,对于标准较低的聚合和复杂的操作,实现这些常见操作没有意义。
例如:假设在您想将您的学生添加到数据库之前,您需要对该学生进行一些复杂的验证并将这些详细信息隐藏在客户端上。
最好,我喜欢直接使用 DBContext。它给了我更多的自由空间来做我需要做的任何事情,而不必考虑将那个方法添加到接口中,然后去实现它。无论如何,如果您想使用存储库模式。我建议使用通用的,如下所示:
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class, IEntity
{
private readonly CrudContext _context;
private readonly DbSet<TEntity> _dbSet;
public Repository(CrudContext context)
{
this._context = context;
this._dbSet = context.Set<TEntity>();
}
public IEnumerable<TEntity> List()
{
return _dbSet.ToList();
}
public TEntity GetById(int id)
{
return _dbSet.Find(id);
}
public void Insert(TEntity entity)
{
_dbSet.Add(entity);
_context.SaveChanges();
}
public void Update(TEntity entity)
{
_dbSet.Attach(entity);
_context.Entry(entity).State = EntityState.Modified;
_context.SaveChanges();
}
public void Delete(int id)
{
var entityToDelete = _dbSet.Find(id);
_dbSet.Remove(entityToDelete);
_context.SaveChanges();
}
}
如果涉及到我的偏好,我要么直接在依赖类中使用dbcontext,要么创建一个名为的接口,IEntityInserter
并且对于每个具有过多插入逻辑的记录类型或模型,我将创建一个名为的实现
StudentBasedEntityInserter : IEntityInserter<Student> {
public void Insert(Student @student){}
}
并将该 IEntityInserter 注入任何依赖类。
最后,在那个激烈的话题中没有正确的答案,有些人会同意我的方法,有些人不会。希望它有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句