您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

每个实体的通用存储库还是特定存储库?

每个实体的通用存储库还是特定存储库?

首先,如果您使用的是完整的ORM,例如Entity Framework或NHibernate,则应避免实现存储库和工作单元的附加层。这是因为; ORM本身公开了通用存储库和工作单元。 如果是EF,则您DbContext是工作单位,并且DbSet是通用存储库。如果是NHibernate,它ISession本身就是。 在相同的现有存储库上构建通用存储库的新包装是重复的工作。为什么要重新发明轮子?

,有人认为直接在调用代码中使用ORM存在以下问题:

除了上述所有以外,通常讨论的另一个问题是“如果我们决定将来更改ORM,该怎么办”。这不是决策时的重点,因为:

考虑到上述四个问题,即使您使用的是完整的ORM,也可能有必要创建存储库-但是, 。

即使在这种情况下,也必须避免使用通用存储库。它被认为是反模式。

我建议你阅读这些(12345)的文章解释了为什么通用存储库是一个反模式。这回答论述了一般Repository模式。

因此,我建议:

无论如何,请勿将通用存储库暴露给调用代码

另外,请勿IQueryable从具体存储库中返回。这违反了存储库存在的基本目的- 抽象数据访问。通过IQueryable在存储库外部进行公开,许多数据访问决策都会泄漏到调用代码中,并且存储库失去了对其的控制。

我需要为每个实体创建一个存储库还是为上下文实现一个通用存储库

如上所述,为每个实体创建存储库是更好的方法。请注意,存储库最好返回域模型而不是实体。但这是另一个讨论的话题。

通用存储库可用于EF Database First吗?

如上所述,EF本身公开了通用存储库。在上面再建一层是没有用的。您的图片在说同样的话。

其他 2022/1/1 18:14:49 有506人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶