Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Asp.net mvc 3 如何创建存储库(使用EF),以便从MVC项目中删除EF引用/DLL?_Asp.net Mvc 3_Entity Framework_Repository - Fatal编程技术网

Asp.net mvc 3 如何创建存储库(使用EF),以便从MVC项目中删除EF引用/DLL?

Asp.net mvc 3 如何创建存储库(使用EF),以便从MVC项目中删除EF引用/DLL?,asp.net-mvc-3,entity-framework,repository,Asp.net Mvc 3,Entity Framework,Repository,我想创建一个DataAccess/DataLayer项目并在那里封装EF,这样我的MVC项目就不会知道我实际上在使用EF。我可能决定将来使用NHibernate,而VisualStudio创建的开箱即用的MVC项目将EF REFEREECE/DLL添加到web项目中。 当然,我不能从MVC访问DbContext,因为它需要EF引用 因此,由于需要EF,我将无法使用代码优先的数据注释 是否值得创建一个存储库,或者我应该保持它的“简单”并将EF引用添加到我的MVC项目中 对于我来说,我需要在使用上下

我想创建一个DataAccess/DataLayer项目并在那里封装EF,这样我的MVC项目就不会知道我实际上在使用EF。我可能决定将来使用NHibernate,而VisualStudio创建的开箱即用的MVC项目将EF REFEREECE/DLL添加到web项目中。 当然,我不能从MVC访问DbContext,因为它需要EF引用

因此,由于需要EF,我将无法使用代码优先的数据注释

是否值得创建一个存储库,或者我应该保持它的“简单”并将EF引用添加到我的MVC项目中

对于我来说,我需要在使用上下文/数据库的所有项目、测试和客户机中添加对EF的引用是没有意义的


感谢

我选择在几乎所有的项目中实现存储库系统,其确切目的是将我的DAL与任何一种数据访问技术甚至特定的数据库分离。

您试图创建的是典型的层模式。在顶部,你有表示层,中间有你的业务层,在底部(或者最后一层),你有你的DAL层。 你如何设计你的图层完全取决于你的意见和需要,但是我上面描述的方式要求你有3个不同的项目。MVC项目、逻辑项目和DAL项目。DAL项目将包含EF引用和存储库对象。然后由您将DbContext/ObjectContext项转换为POCO,以便在业务层中使用它们。业务层将了解EF(取决于您传递EF对象的方式),但业务层随后会将自己的对象(从DAL层对象映射)传递到MVC——从而将EF与MVC层完全解耦

如果要使用这种模式,应该更进一步,使用引导容器(使用Unity Framework的横切项目,或者类似的东西)包含依赖项注入

请参阅Microsoft模式与实践(第25章是分层的一个很好的示例)