2014-02-12 39 views
4

由于MSDN说,大约DbContext我应该为EF6实施Repository,Unit of Work吗?

甲的DbContext实例表示该单元的工作的组合和 库模式,使得它可以用来从数据库 和组查询然后将被写入的变化一起作为一个单元返回商店 。 DbContext在概念上与ObjectContext相似。

使用EF5 +时,实现这两个(工作单元&存储库)不是多余的吗?

有人可以在这个问题上更多的灯光?

我打算使用SQL服务器构建一个基于MVC的应用程序,在阅读了大量有关单元可测试性的数据访问技术之后,我对上述信息感到迷茫!

回答

1

这就要看你的项目和它的需求的复杂性。例如,这两个问题可能会帮助您做出决策:

  1. 您是否会使用除EF外必须使用的其他任何数据源?
  2. 将EF换成不同的ORM或数据源的可能性有多大?

如果您无法预见变化,或者您不需要使用EF以外的工作,那么这可能不值得您付出麻烦。

+1

通用存储库的问题实际上很小。 –

+1

@jnovo:对于这两个问题,我的答案是“否”。我最关心的是(简单)整个应用程序的测试能力! – Nauman

+1

@SamLeach以及我认为这取决于项目。人们开始使用很多样板来做很多小事。可以说,如果你不打算注入依赖关系等,那么使用通用回购就没有意义了。此外,还有一些缺点必须加以衡量,比如不直接使用EF功能而丢失EF功能。 – jnovo

1

我会创建一个通用存储库,因此您可以比嘲笑实体框架的上下文更容易地在测试中嘲笑它。但是,是的,EF 5+确实按照MSDN的规定实施了这些模式。

这是一个抽象层。存储库模式是一个对象集合和一个获取对象集合的东西。实体框架知道如何获得该对象的集合,该存储库不知道如何。

实体框架有许多功能,您可能会通过将其包装到存储库或更细的服务中而松散。如果您练习针对您自己的课程的TDD编码通常比嘲笑第三方代码更舒服。

Ayende has a blog post about this.

+2

Ayende的博客引发了这个问题,但我确实想确保有人用单元测试测试了水域(使用原始EF,没有封装) – Nauman

+0

@Nauman我不会因为通常测试第三方库而感到痛苦。 EF可能不是一件痛苦的事情,但我通常会远离它,你可以在它周围定居一个精简服务而不是存储库。 –

+0

您是否有通用资源库实施的工作示例?或者你可以指给我一个资源,它可以提供这样的资源吗? – Nauman

相关问题