【问题标题】:Entity Framework + Repository + Unit of Work实体框架 + 存储库 + 工作单元
【发布时间】:2012-02-02 01:40:07
【问题描述】:

我正在考虑使用 EF 4 开始一个新项目并浏览了一些文章,我发现了一些关于 EF 以及存储库模式和工作单元的文章

http://tdryan.blogspot.com/2011/03/another-entity-framework-4-repository_15.htmlhttp://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx

我正在使用第一个(第 1 部分、第 2 部分和第 3 部分)。它们非常相似。

在这种情况下,我是新手。我对这两个帖子感到困惑。我已经创建了所有内容,但我不知道如何开始使用上下文并向其中添加一些实体。我发布了第二个链接,因为发布了一种实现它的方法。 ObjectContext 派生自 IUnitOfWork,所以我很困惑选择这两者中的哪一个更好用。

【问题讨论】:

    标签: c# entity-framework design-patterns repository unit-of-work


    【解决方案1】:

    如果您的项目是网络项目,请创建一个处理程序,根据请求启动事务并在最后一步结束。

    我认为可以在这里找到一个更简单的示例:https://github.com/ayende/CourseSampleApp 您还可以在 nhibernate 上找到其他可以满足您需求的示例。

    【讨论】:

      【解决方案2】:

      你的问题并不愚蠢!开始使用 UnitOfWorkRepository 模式需要一些时间。

      首先,让一些术语正确。 UnitOfWork 封装了一组动作并将它们组合在一起。例如,您可以在一个逻辑组中创建客户、产品和相应的订单。

      Repository 为您提供了对实体的单点访问,并且大多数情况下都有一些特定的方法来检索数据。

      多个存储库可以在一个事务中使用,这就是它们共享UnitOfWork 的原因。

      在您发布的示例中,T4 文件创建了一些 Repository 接口。一个是只读的,具有选择实体的方法,但另一个 Repository 具有 AddDelete 等方法。

      所以如果你想添加一个实体,你需要首先构造一个UnitOfWork,然后为你使用的实体类型实例化一个Repository(例如CustomerRepositoryProductRepository)。然后,您可以使用Add 方法将实体添加到Repository。使用完存储库后,您可以调用 UnitOfWork.Commit() 来保存对数据库的更改。

      IUnitOfWork unitOfWork = new EFUnitOfWork();
      
      IRepository<Customer> customerRepository = new CustomerEFRepository(unitOfWork);
      
      Customer c = new Customer();
      
      // init customer
      
      customerRepository.Add(c);
      unitOfWork.Commit();
      

      在您发布的示例中,使用了带有 StructureMap 的依赖注入。这完全是另一个话题,但这意味着您不直接构造UnitOfWorkRepository,而是使用您设置的一些配置将它们“注入”到您的代码中。

      【讨论】:

      • 我一直在研究我自己的 C# 存储库/工作单元模式,我一直想知道它是否正确。这正是我使用 Ninject 将 uow 和存储库注入 mvc 控制器的方法。我的 unitofwork 拥有与 repos 共享的 DbContext 类的副本。以为你解释得很好:-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 2012-12-27
      • 2023-03-31
      • 2013-01-04
      相关资源
      最近更新 更多