我是否需要在表示层中添加对EntityFramework.SqlServer的引用?

时间:2014-04-21 04:54:20

标签: c# ef-code-first asp.net-mvc-5

我正在使用3层MVC编写Web, BLL and DAL网络应用程序。我根据自己的需要选择了MVC 5 Code第一种方法。我的上下文和模型类驻留在DAL中。我在BLL中实现了从DAL获取数据的存储库模式,将数据加载到ViewModel中并提供来自Web层的请求。

WEB - >参考BLL

BLL - >引用了DAL(BLL上安装的实体框架)

DAL - > (在DAL上安装的实体框架)。

我在DAL和BLL上都安装了实体框架,因为我在这两个层中都使用了DBSet或IDBSet。

现在,问题是,当我运行应用程序时,我不断收到以下错误。除非我在Web层安装实体框架,否则它不会消失,我不愿意这样做。我不喜欢将实体框架添加到Web层,除非我绝对必须这样做。但dll杀死它的EntityFramework.SqlServer.No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

ERROR:

{{1}}

如果我可以这样做而不必在我的网络层安装实体框架,请告诉我。任何输入都非常感谢。

2 个答案:

答案 0 :(得分:0)

我理解它的方式是,当你使用MVC时,每个层将独立于另一个层(意味着某些依赖关系,例如迎合特定数据库引擎,不应该冒泡到视图层,如你的困境)。

如果我正确理解您的问题,您就是说您的中间层中也有数据库相关的数据集。我认为这是不可取的,因为你约束你的中间层使用数据库相关的数据结构。

我认为它的方式不应该是DAL内部使用面向数据库的数据结构的问题,但是,它应该通过使用传统与系统的其他部分进行交互数据结构,例如Lists和Sets。

同样适用于中间层。如果这样做,您应该能够保持数据层中包含的实体框架参考要求。一切都是自成一体的(参考明智)。

答案 1 :(得分:0)

你应该在组合根目录中拥有所有引用。在您的应用程序组合中,root是web层,因此您应该将此引用添加到项目中。但是你不应该在web层中使用它的类。