我正在尝试使用实体框架(EF6来理解和实现存储库和工作单元模式;不确定EF6是否真的有必要)。我理解这种方法,但我仍然没有问题。
这是我所指的代码:
public interface IRepository<TEntity> where TEntity : class
{
IEnumerable<TEntity> GetAll();
void RemoveRange(IEnumerable<TEntity> entities);
//others
}
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
protected readonly DbContext _context;
public Repository(DbContext context)
{
_context = context;
}
public IEnumerable<TEntity> GetAll()
{
return _context.Set<TEntity>().ToList();
}
public void RemoveRange(IEnumerable<TEntity> entities)
{
_context.Set<TEntity>().RemoveRange(entities);
}
//And others
}
我的DB痉挛回购
public interface ICourseRepository : IRepository<Course>
{
IEnumerable<Course> GetCourseWithAuthors();
}
要在我的业务中获取数据,我必须这样做
List<Course> courseWithAuthor = repo.GetCourseWithAuthors();
现在,如果我们查看返回IRepository<Course>
的{{1}}和方法IEnumerable<Course> GetCourseWithAuthors();
。我的问题是IEnumerable<Course>
是我们的实体框架自动生成的模型,我不想在我的业务中使用它。
背后的原因可能是在一些糟糕的日子我必须改变表名。然后更新实体并再次返回业务,将Course
更改为新的名称。
可能Course
表有5列,我只想要课程和作者姓名,然后dbo.Course
中的其他属性将为Course
。
可能还有其他人。
如果我的观点合理,如何解决这个问题。