工作单位和共同执行

时间:2013-12-29 16:51:13

标签: entity-framework repository-pattern unit-of-work

我对UoW,Repository Pattern和EF的常见实现有一些疑问:

public interface IAppUow
{
    void Commit();
    IRepository<Customer> Customer{ get; } // IRepository<T>
    IOrderRepository Order{ get; }         // implements IRepository<T>
} 

我的问题是:

如果我需要添加任何类型的新存储库,我必须更改UoW。这是一个好习惯吗?如果没有,有更好的方法吗?

如果我运行Commit()(context.SaveChanges),它将保存所有contexts存储库的状态。这是一个好方法吗?

1 个答案:

答案 0 :(得分:1)

EntityFramework已经构建了一个工作单元。这使您可以调用 context.SaveChanges 来存储所有更改,因此您不应该包含另一个工作单元模式。您应该在代码中直接使用 IRepository IOrderRepository

问题:

  1. 没有。根据您的应用程序对订单和客户的作用,您可以将它们放在一个存储库中。如果您最重要的是对Orders感兴趣并且只想知道在哪里发货,那么这个存储库和一个上下文就足够了。请不要将你的UoW包裹在EF周围。

  2. 如果您只有一个EF上下文和多个使用它的存储库,则在OrderRepository上调用Save时将保存所有挂起的更改。如果您希望仅保存OrderRepository中的更改而不保存CustomerRepository中的更改,则会出现问题。您可以使用不同的EF上下文对象解决此问题,但是您将遇到问题,对象图中的哪些对象由 context1 加载,哪些对象由 context2 加载。我建议您按照EF方式完成并构建一个上下文,当您调用save时,所有对象都会被保存。要拆分它,您需要确定应用程序如何处理数据。

  3. 您可以找到EF和ASP.NET MVC here的代码示例。