Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否应该实现EF6的工作单元存储库?_C#_Asp.net Mvc_Entity Framework_Unit Testing - Fatal编程技术网

C# 我是否应该实现EF6的工作单元存储库?

C# 我是否应该实现EF6的工作单元存储库?,c#,asp.net-mvc,entity-framework,unit-testing,C#,Asp.net Mvc,Entity Framework,Unit Testing,因为MSDN说: DbContext实例表示工作单元和 存储库模式,以便可以使用它从数据库进行查询 并将更改分组,然后将这些更改写回存储 作为一个整体。DbContext在概念上类似于ObjectContext 在使用EF5+时实现这两个(工作单元和存储库)不是多余的吗 有人能在这个问题上多解释一下吗 我打算使用SQL server构建一个基于MVC的应用程序,在阅读了大量关于具有单元可测试性的数据访问技术之后,我对上述信息有点不知所措 我将创建一个通用存储库,这样您就可以在测试中模拟它,而不是

因为MSDN说:

DbContext实例表示工作单元和 存储库模式,以便可以使用它从数据库进行查询 并将更改分组,然后将这些更改写回存储 作为一个整体。DbContext在概念上类似于ObjectContext

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

有人能在这个问题上多解释一下吗


我打算使用SQL server构建一个基于MVC的应用程序,在阅读了大量关于具有单元可测试性的数据访问技术之后,我对上述信息有点不知所措

我将创建一个通用存储库,这样您就可以在测试中模拟它,而不是直接模拟实体框架的上下文。但是,是的,EF5+确实实现了MSDN声明的这些模式

这是一个抽象层。存储库模式是对象的集合,是获取对象集合的工具。实体框架知道如何获取对象集合,而存储库不知道如何获取

实体框架有很多特性,您可以通过将其包装到存储库或更薄的服务中来释放这些特性。如果您针对自己的类练习TDD编码,通常比模仿第三方代码更舒服


这取决于项目的复杂性及其要求。例如,这两个问题可能有助于您的决策:

  • 除了EF,您还会使用其他必须使用的数据源吗
  • 将来将EF交换为不同的ORM或数据源的可能性有多大

  • 如果您不能预见更改,或者您不需要使用EF以外的工具,那么可能不值得费心。

    使用通用存储库的麻烦非常小。@jnovo:对于这两个问题,我的答案都是“不”。我最关心的是(轻松地)测试整个应用程序的能力@SamLeach嗯,我再次认为这取决于项目。有太多的时候,人们开始使用大量的样板来处理非常小的事情。可以说,如果你不打算注入依赖项等,那么使用通用repo没有什么意义。此外,还存在一些必须考虑的缺点,例如不直接使用它会丢失EF功能。@jnovo,+1如果你不公开这些功能,你可能会丢失这些功能。Ayende的博客引发了这个问题,但我实际上想确保,有人(使用原始EF,没有包装)在单元测试的情况下测试过水吗?@Nauman我不会,因为通常测试第三方库是件痛苦的事。EF可能不是一个难题,但我通常不会使用它,您可以选择围绕它的精简服务而不是存储库。您有通用存储库实现的工作示例吗?或者你能给我指一个资源,它可以提供这些吗?这里有很多例子。和搜索/搜索?q=ef+通用+存储库