我正在使用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}}
如果我可以这样做而不必在我的网络层安装实体框架,请告诉我。任何输入都非常感谢。
答案 0 :(得分:0)
我理解它的方式是,当你使用MVC时,每个层将独立于另一个层(意味着某些依赖关系,例如迎合特定数据库引擎,不应该冒泡到视图层,如你的困境)。
如果我正确理解您的问题,您就是说您的中间层中也有数据库相关的数据集。我认为这是不可取的,因为你约束你的中间层使用数据库相关的数据结构。
我认为它的方式不应该是DAL
内部使用面向数据库的数据结构的问题,但是,它应该通过使用传统与系统的其他部分进行交互数据结构,例如Lists和Sets。
同样适用于中间层。如果这样做,您应该能够保持数据层中包含的实体框架参考要求。一切都是自成一体的(参考明智)。
答案 1 :(得分:0)
你应该在组合根目录中拥有所有引用。在您的应用程序组合中,root是web层,因此您应该将此引用添加到项目中。但是你不应该在web层中使用它的类。