正确实现大型模型的存储库服务模式

时间:2017-10-06 09:14:10

标签: c# wpf entity-framework design-patterns repository-pattern

我在C#WPF MVVM项目中实现了存储库服务模式的困境,我的模型中有一个大数据集。

我首先使用EntityFramework数据库创建了大约40个实体,因此我的模型非常庞大,对我来说实现40个不同的存储库没有意义,因为我使用了通用存储库服务模式。

我的存储库如下所示:

  public interface IEntityRepository<T> : IDisposable where T : class
  {
    IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);
    IEnumerable<T> getEntities();
    T RetrieveEntity(int entityID);
    void CreateEntity(T entity);
    void UpdateEntity(T entity);
    void DeleteEntity(T entity);
    void Save();
  }

这是实现这些方法的类的签名。

    public class EntityRepository<T> :
     IEntityRepository<T> where T : class
    {
      private DbContext context;
      public EntityRepository(DbContext context)
      {
        this.context = context;
      }          

       .....

    }

我现在的问题是,服务将如何呈现,以便我不必为模型中的每个实体实现它。 我正在寻找类似的东西,我可以通过实体的类型名称来动态创建服务。

有谁知道我的问题的解决方案? 谢谢!

1 个答案:

答案 0 :(得分:0)

如果您的存储库类与您的物理数据库实体一对一映射,我不相信存储库模式是一个有用的层。

使用服务图层或其他类型的外观可能会更好。如果您坚持在实体框架之上的数据访问层,您也可能会使用查询模式找到成功。在此模式中,每个查询类都可以有一个参数对象,用于定义可以在模型上查询的参数。返回的数据结构更适合在业务或用户界面层中使用。然后,每个查询对象都与业务或用户界面层的某些部分相关。当您必须查询数据而不是访问单个实体时,可以使用查询模式。