C# 是否需要在表示层中添加对EntityFramework.SqlServer的引用?
我正在编写一个使用3层的C# 是否需要在表示层中添加对EntityFramework.SqlServer的引用?,c#,ef-code-first,asp.net-mvc-5,C#,Ef Code First,Asp.net Mvc 5,我正在编写一个使用3层的MVCweb应用程序,web、BLL和DAL。我选择了MVC5代码优先的方法来满足我的需求。我的上下文和模型类位于DAL中。我在BLL中实现了repository模式,它从DAL获取数据,将数据加载到ViewModels中,并为来自Web层的请求提供服务 WEB-->引用了BLL BLL-->引用了DAL(安装在BLL上的实体框架) DAL-->(安装在DAL上的实体框架) 我在DAL和BLL上都安装了实体框架,因为我在这两个层中都使用DBSet或IDBSet 现在,问题
MVC
web应用程序,web、BLL和DAL
。我选择了MVC5代码优先的方法来满足我的需求。我的上下文和模型类位于DAL中。我在BLL中实现了repository模式,它从DAL获取数据,将数据加载到ViewModels中,并为来自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.
请让我知道我是否可以做到这一点,而不必在我的web层上安装实体框架。非常感谢您的任何意见 我的理解是,当您使用MVC时,每一层都是相互独立的(这意味着某些依赖项,例如为特定的DB引擎服务的依赖项,根据您的困境,不应该出现在视图层上) 如果我正确理解了您的问题,您的意思是在中间层中也有与数据库相关的数据集。我认为这不是一种方法,因为您限制中间层使用与数据库相关的数据结构 在我看来,
DAL
内部使用面向数据库的数据结构应该不是问题,但是,它应该通过使用传统的数据结构(如列表和集合)与系统的其他部分进行交互
这同样适用于中间层。如果您这样做,您应该能够将实体框架引用需求包含在您的数据层中。所有内容都是自包含的(引用方面)。您应该在composition root中拥有所有引用。在应用程序组合中,根是web层,所以您应该将此引用添加到项目中。但您不应该在web层中使用它的类