【问题标题】:Entity Framework error: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'实体框架错误:找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序
【发布时间】:2014-04-16 15:55:38
【问题描述】:

我有以下 MVC 项目结构:

BLL

DAL

通用类

网络

我正在使用实体框架 6.0.2。 Web 项目引用了 BLL 和 CommonClasses 项目。 BLL 引用了 DAL 和 CommonClasses。 BLL 和 DAL 也都引用了通过 Nuget 添加的 EF 6.0.2。每当我的代码尝试使用 Entity Framework 做任何事情时,我都会收到以下错误:

找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分注册。

我对正在发生的事情有点迷茫。我检查过,在 DAL 和 BLL 项目中有对 EntityFramework.SqlServer 的引用。所有项目也都有对 System.Data 的引用。

DAL 和 BLL 项目中的 app.config 文件具有以下行:

  <entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

【问题讨论】:

标签: c# asp.net asp.net-mvc entity-framework


【解决方案1】:

确保EntityFramework.SqlServer.dll 位于Web1 的应用程序目录中(即位于bin 文件夹中)。如果顶级可执行文件/站点不直接依赖此文件,它并不总是被复制。

【讨论】:

  • 是否可以通过 Visual Studio 将其添加到其他任何参与该项目的人中?我只是手动将它复制到 bin 中并且它可以工作,但是如何通过 VS 来完成呢?如果我尝试在项目中添加对它的引用,我在搜索结果中看不到 EntityFramework.SqlServer。
  • 最骇人听闻的 (TM) 方法是这样做并使用 EntityFramework 将引用添加到项目中,然后它将作为依赖项包含在任何下游项目中:内部静态只读类型SqlProviderServicesType = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
【解决方案2】:

请在此处查看我的 SO 答案,其中引用了一个非常有帮助的博客。我必须执行几个步骤才能复制和加载该 DLL。

Error: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'

【讨论】:

    猜你喜欢
    • 2014-03-05
    • 2014-02-06
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多