使用 EF Code First 创建存储库模式时,我没有掌握一些东西。如果我想抽象出 EF,我必须使我的存储库的类型为 IObjectContextAdapter,不是吗?这就是 DbContext 实现的。如果我稍后切换到使用 NHibernate 或其他第 3 方 ORM 之类的东西,它可能无法实现 IObjectContextAdapter。
我唯一的解决方案是创建一个包装 ORM 并返回 IObjectContextAdapter 实现的包装器吗?如果是这样,意义何在?
使用 EF Code First 创建存储库模式时,我没有掌握一些东西。如果我想抽象出 EF,我必须使我的存储库的类型为 IObjectContextAdapter,不是吗?这就是 DbContext 实现的。如果我稍后切换到使用 NHibernate 或其他第 3 方 ORM 之类的东西,它可能无法实现 IObjectContextAdapter。
我唯一的解决方案是创建一个包装 ORM 并返回 IObjectContextAdapter 实现的包装器吗?如果是这样,意义何在?
我不确定在IObjectContextAdapter
使用 EF 创建存储库模式时是否必须实施。使用 EF 或类似 NHibernate 的主要区别在于如何分别包装 theDbContext
或 the 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
注入。