我们开始在我们公司开发一个小框架,在不同的应用程序之间共享代码。对于数据访问,我们使用的是 EF4。我们有一个自定义 DbContext 类和一个通用存储库:
public class RMDbContext : DbContext
{
// ....
}
public interface IRepository
{
IQueryable<T> All();
void Delete(T entity) where T : class;
void Add(T entity) where T : class;
void Update(T entity) where T : class;
int SaveChanges();
void RollbackChanges();
}
这里的问题是如何使用我们自定义的 DbContext 类 (RMDbContext) 来实现存储库。我的同事认为最好的方法是让 RMDbContext 实现 IRepository 接口:
public class RMDbContext : DbContext, IRepository
{
// ....
}
老实说,我不喜欢这种方法,因为上下文与特定的合同(IRepository)相关联。IMO 最好创建一个使用 RMDbContext 的存储库实现,如下所示:
public class Repository<T> : IRepository where T : RMDbContext, new()
{
protected readonly RMDbContext context;
public class Repository()
{
context = new T();
}
// ....
}
您如何看待这两种方法?你会选择哪一个,为什么?