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

本文关键字:SqlServer EntityFramework 引用 添加 表示层 | 更新日期: 2023-09-27 17:59:19

我正在编写一个使用三层Web, BLL and DALMVC web应用程序。我选择了MVC 5代码优先的方法来满足我的需求。我的上下文和模型类位于DAL中。我正在我的BLL中实现存储库模式,它从DAL获取数据,将数据加载到ViewModels中,并为来自Web层的请求提供服务。

WEB-->参考了BLL

BLL-->参考DAL(安装在BLL上的实体框架)

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

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

现在,问题是,当我运行应用程序时,我不断收到以下错误。除非我在Web层上安装实体框架,否则它不会消失,我对此犹豫不决。除非万不得已,否则我不喜欢将实体框架添加到Web层。但扼杀它的dllEntityFramework.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层上安装实体框架。任何意见都将不胜感激。

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

我对它的理解是,当你使用MVC时,每一层都将独立于另一层(这意味着某些依赖关系,例如为特定的DB引擎提供服务,不应该出现在视图层,根据你的困境)。

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

在我看来,DAL在内部使用面向数据库的数据结构应该不是问题,但是,它应该通过使用传统数据结构(如列表和集合)与系统的其他部分进行交互。

这同样适用于中间层。如果这样做,您应该能够将实体框架参考需求包含在数据层中。一切都是自我包含的(参考)。

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