我目前正在调查存储库模式,并读取存储库模式可以通过两种方式实现: -
每个实体一个存储库(非泛型):这种类型的实现 涉及为每个实体使用一个存储库类。例如, 如果您有两个实体订单和客户,每个实体将拥有它 自己的存储库。
和
通用存储库:通用存储库是可以使用的存储库 对于所有实体,换句话说,它可以用于订单 或客户或任何其他实体。
然后我读到了Unit of Work
概念以及它如何使我们免于因第一种方式导致的数据库不一致。
我的困惑在于第二种方式。
为什么我需要使用'工作单位'当我创建了一个通用存储库?
由于无法发生任何不一致。
最小化冗余代码的一种方法是使用通用存储库,和 确保所有存储库使用相同数据库上下文的一种方法 (从而协调所有更新)是使用工作单位。
但是,由于我将拥有一个通用存储库,那么需要什么呢?
答案 0 :(得分:0)
Usualy你没有"单身"通用存储库。 在复杂的应用程序中,有时您必须在控制器中使用许多实例 (例如
var productsRepo = new Repository<Products>();
var userRepo = new Repository<Users>();
这是通用存储库的两个不同实例,它们可能导致db不一致(甚至异常,如果两者都有不同的dbContext并且您尝试修改两个存储库中的实体)。 这就是为什么你必须正确管理dbContext,而工作单位是实现它的众多方法之一。