Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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# 是否需要在表示层中添加对EntityFramework.SqlServer的引用?_C#_Ef Code First_Asp.net Mvc 5 - Fatal编程技术网

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

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 现在,问题

我正在编写一个使用3层的
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层中使用它的类