使用EF Code First的存储库模式

时间:2013-04-21 20:09:33

标签: ef-code-first repository-pattern

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

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

1 个答案:

答案 0 :(得分:0)

在使用EF创建存储库模式时,我不确定是否必须实现IObjectContextAdapter。使用EF或类似NHibernate之间的主要区别在于如何分别包装DbContextISession

以下是如何编写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