使用'工作单位'使用单个通用存储库时?

时间:2018-01-09 13:58:24

标签: asp.net asp.net-mvc repository-pattern

我目前正在调查存储库模式,并读取存储库模式可以通过两种方式实现: -

  

每个实体一个存储库(非泛型):这种类型的实现   涉及为每个实体使用一个存储库类。例如,   如果您有两个实体订单和客户,每个实体将拥有它   自己的存储库。

  

通用存储库:通用存储库是可以使用的存储库   对于所有实体,换句话说,它可以用于订单   或客户或任何其他实体。

然后我读到了Unit of Work概念以及它如何使我们免于因第一种方式导致的数据库不一致。

我的困惑在于第二种方式。

为什么我需要使用'工作单位'当我创建了一个通用存储库?

由于无法发生任何不一致。

  

最小化冗余代码的一种方法是使用通用存储库,和   确保所有存储库使用相同数据库上下文的一种方法   (从而协调所有更新)是使用工作单位。

但是,由于我将拥有一个通用存储库,那么需要什么呢?

1 个答案:

答案 0 :(得分:0)

Usualy你没有"单身"通用存储库。 在复杂的应用程序中,有时您必须在控制器中使用许多实例 (例如

var productsRepo = new Repository<Products>();
var userRepo = new Repository<Users>();

这是通用存储库的两个不同实例,它们可能导致db不一致(甚至异常,如果两者都有不同的dbContext并且您尝试修改两个存储库中的实体)。 这就是为什么你必须正确管理dbContext,而工作单位是实现它的众多方法之一。