在使用EF Code First创建存储库模式时,我并没有抓住一些东西。如果我想抽象出EF,我必须使我的存储库类型为IObjectContextAdapter,不是吗?这就是DbContext实现的。如果我以后切换到使用NHibernate或其他第三方ORM之类的东西,它可能无法实现IObjectContextAdapter。
我唯一的解决方案是创建一个包装ORM的包装器并返回IObjectContextAdapter的实现吗?如果是这样,有什么意义呢?
答案 0 :(得分:0)
在使用EF创建存储库模式时,我不确定是否必须实现IObjectContextAdapter
。使用EF或类似NHibernate之间的主要区别在于如何分别包装DbContext
或ISession
。
以下是如何编写EF代码优先存储库的草图:
public interface IRepository<TEntity>
{
void Save();
}
public class Repository<TEntity> : IRepository<TEntity>
{
private readonly IDbSet<TEntity> entitySet;
public Repository(DbContext context)
{
this.entitySet = context.Set<TEntity>();
}
public void Save()
{
return this.entitySet.SaveChanges();
}
}
这允许注入实际的DbContext
。