【问题标题】:Entity Framework Repository Pattern Architechture实体框架存储库模式架构
【发布时间】:2012-07-02 20:55:01
【问题描述】:

学习实现实体框架。我有一个通用存储库。我想实现一个业务层。我知道如何为此进行编码,但有点不确定在哪里执行此操作。

  1. 是否为每个实体创建一个业务层类?

例如,数据库中有提供者、代理机构和联系人。我有一个通用存储库。我应该创建 ProviderManager、AgencyManager 和 ContactManager 吗?

  1. 除了业务层之外,我还需要为每个实体创建一个明确的存储库吗?

例如,我需要显式的 ProviderRepository 吗?

【问题讨论】:

  • 专注于你必须实现的功能而不是专注于你不理解的模式怎么样?我们无法回答您的问题,因为我们不知道您必须实现什么目标以及您的业务需求有多复杂。
  • 这就是我的问题。这是一个非常简单的项目,所以我认为学习使用实体框架将是一个很好的项目。所以我研究了微软的 EF 教程,它只有一个存储库。所以我最初的想法是我将为每个实体拥有一个单独的存储库,但这似乎有点愚蠢。我需要的功能是基本的 CRUD 操作,以及一些附加功能。
  • 那么,为什么不使用没有任何存储库的纯 EF 并在使用其他复杂性之前先学习 EF 呢? EF itself already implements repository。我觉得EF的学习对于单个项目来说应该足够了。

标签: asp.net vb.net entity-framework repository-pattern


【解决方案1】:

您可以使用 nuget 包 T4Scaffolding 为 EF 模型类轻松生成存储库。您可以根据以下给出的链接启动新的类项目并实现此存储库。然后在您的业务类中引用它。此存储库包括每个模型类的基本 CRUD 操作。更多详情http://thedatafarm.com/data-access/using-t4scaffolding-to-create-dbcontext-and-repository-from-domain-classes/

【讨论】:

    【解决方案2】:

    我是否为每个实体创建一个业务层类?

    不,这不是真的必要。业务可以使用多个存储库实体来执行业务操作。例如CheckOutOrder 类可能包括支付、运输、库存等类型的存储库操作。它是业务层,它应该不知道持久存储是如何表示您的数据的。

    解决您的第二个问题,存储库模式是您放置在数据访问层上的抽象层(例如 ADO.NET/EF/NHibernate 等 ORM) IMO,如果您真的想使用存储库模式,请记住您正在引入一个额外的层。

    您的存储库层可能是这样的:

    IRespository<T>
    RespositoryBase<T> : IRepository<T>
    

    此外,如果您想保持其通用性,那也没关系。但请确保您的通用函数保留在基类中。您想要在所有存储库中重用通用代码。现在您可以为每个实体创建一个专用类。

    ProviderRepository : RepositoryBase<ProviderEntity>
    

    您还可以为每种类型的存储库引入抽象来表示实体特定的方法。

    ProviderRepository : RepositoryBase<ProviderEntity>
    
    ProviderRepository : RepositoryBase<ProviderEntity>, IProviderRepository
    

    实际的实现可能会有所不同,但这只是一个演示,只是为了让您有一个先机。您会在 Internet 上找到大量的存储库模式实现。但我建议先了解它并保持简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多