0

使用 EF Code First 创建存储库模式时,我没有掌握一些东西。如果我想抽象出 EF,我必须使我的存储库的类型为 IObjectContextAdapter,不是吗?这就是 DbContext 实现的。如果我稍后切换到使用 NHibernate 或其他第 3 方 ORM 之类的东西,它可能无法实现 IObjectContextAdapter。

我唯一的解决方案是创建一个包装 ORM 并返回 IObjectContextAdapter 实现的包装器吗?如果是这样,意义何在?

4

1 回答 1

0

我不确定在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注入。

于 2013-04-21T20:41:17.353 回答