0

我尝试创建 3 层架构应用程序。有 2 个类库(数据访问、业务逻辑)和 asp.net MVC(演示)。对于数据库连接,我使用实体框架。在 DataAccess 中,我配置了 DatabaseContext,我的连接字符串存储在 web.config 中。如果我尝试从演示文稿中添加原始数据库,我会收到错误

找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。”

我的理解是在表示级别安装 EF 是不好的做法。我考虑添加参考 System.Data.SqlClient 但认为这也是不好的做法。也许有人遇到了类似的问题。如有任何帮助,我将不胜感激。

4

1 回答 1

1

如果您坚持真正的三层架构并在各层之间使用接口和依赖项注入,那么问题很可能是 Visual Studio 没有看到您实际上正在使用数据层并且没有部署依赖项。几年前我研究过这个问题,解决起来有点痛苦。由于您提供的信息很少,我不确定这是否是您的问题,但如果听起来像您的问题,您可以通过将网络硬依赖添加到数据层来进行测试,看看会发生什么。如果这样可以解决错误,那么有几种方法可以解决问题。

由于 Web 项目也被认为是 Composition Root,因此它需要为数据层提供配置,例如连接字符串。因此,Web 层和数据层之间已经共享了一些知识。创建真正独立的图层几乎是不可能的。

如果添加硬依赖可以解决问题,那么您可以为此目的创建一个静态方法并记录该方法,以便未来的开发人员不会尝试删除它。另一种是修改解决方案文件,将目标dll复制到bin文件夹中。这似乎是一个更好的解决方案,但我记得它经常坏掉,我不得不继续返回并将手动输入添加回解决方案,当它坏掉时这很混乱。

我还发现了另一个涵盖同一主题的 stackoverflow 讨论:

找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序

于 2020-02-16T17:01:18.720 回答