为什么要在 EF 顶部构建具有工作单元的存储库模式
本文关键字:单元 工作 存储 模式 EF 顶部 构建 为什么 | 更新日期: 2023-09-27 18:34:14
根据MSDN DbSet:
DbSet<TEntity> Class
DbSet represents the collection of all entities in the context
,或 可以从给定类型的数据库中查询。数据库集对象 使用 DbContext.Set 方法从 DbContext 创建。
根据MSDN的DbContext:
DbContext Class
一个
DbContext instance represents a combination of the Unit Of Work and
Repository patterns
,以便可用于从数据库进行查询 并将更改组合在一起,然后将这些更改写回商店 作为一个单位。DbContext在概念上类似于ObjectContext。
以便EF
内部使用repository pattern
和UOW
。
数据库集<---->存储库
数据库上下文<---->工作单元
为什么要在 EF 顶部构建具有工作单元的存储库模式?
为什么要在 EF 顶部构建具有工作单元的存储库模式?
取决于您希望如何管理依赖项。
如果实体框架是抽象层,数据库本身是依赖项,则实体框架确实已经提供了存储库和工作单元。 权衡是你的域依赖于实体框架。 只要这种依赖性是可以接受的,你就很好。
另一方面,如果要将实体框架本身视为可以在不更改域代码的情况下交换的依赖项,则需要创建一个抽象作为围绕该依赖项的包装器。
基本上,这一切都归结为你在哪里划定什么是或不是"外部依赖"的界限。 对于某些项目来说,这无关紧要,对于某些项目,它是物理数据库,对于某些项目,它是数据访问框架,等等。
为什么要构建一个顶部有一个工作单元的存储库模式 我的EF?
因为接口隔离原则。DbSet
和DbContext
中的方法签名基本上是一个很大的低级混乱,它们与存储库和工作单元中通常预期的内容之间存在巨大的不匹配。换句话说,如果直接使用 DbSet
和 DbContext
,则应用程序服务代码将出现抽象泄漏。
在应用程序层中,您需要操作适当的语义。该层中的代码只需要根据业务事务和大型集合来说话,您可以在其中获取和存储内容。这些都是非常高级的、极简主义的抽象概念。实体框架术语太模糊和低级了,所以你需要引入其他习语 - 存储库和UoW。