通用实体框架项目“找不到 ADO.NET 提供程序的实体框架提供程序”

本文关键字:程序 找不到 框架 实体 NET ADO 项目 | 更新日期: 2023-09-27 18:33:47

所以我查看了具有相同错误的条目,要么不是同一个问题,要么我不理解它。

我有一个包含多个项目的解决方案。 他们使用通用Entity Frame Work 6并将其包含在引用中。 WCF项目使用Entity Frame从数据库中获取数据效果很好。但是我的控制台应用程序给了我,

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

执行调用Entity Framework的相同代码时。

我想我在.config文件中缺少某些内容,但我的连接字符串都是一样的。

实体框架应用配置:

<configuration>
  <connectionStrings>
    <add name="SafetyPortalEntities" connectionString="metadata=res://*/EntityModels.SafetyPortalModel.csdl|res://*/EntityModels.SafetyPortalModel.ssdl|res://*/EntityModels.SafetyPortalModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ndmasdev;initial catalog=SafetyPortal;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

WCF Web.config:

<configuration>
    <connectionStrings>
      <add name="SafetyPortalEntities" connectionString="metadata=res://*/EntityModels.SafetyPortalModel.csdl|res://*/EntityModels.SafetyPortalModel.ssdl|res://*/EntityModels.SafetyPortalModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ndmasdev;initial catalog=SafetyPortal;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    </connectionStrings>
</configuration>

控制台应用配置:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="SafetyPortalEntities" connectionString="metadata=res://*/EntityModels.SafetyPortalModel.csdl|res://*/EntityModels.SafetyPortalModel.ssdl|res://*/EntityModels.SafetyPortalModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ndmasdev;initial catalog=SafetyPortal;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>  
</configuration>

通用实体框架项目“找不到 ADO.NET 提供程序的实体框架提供程序”

可以使用包管理器控制台(工具->Nuget 包管理器->包管理器控制台)并将实体框架添加到控制台应用

install-package entityframework

请务必在包管理器控制台的"默认项目"下拉列表中选择控制台应用。

在经历了许多挫折之后,我终于弄清楚出了什么问题。

WCF 项目会自动在引用中包含对实体框架的引用,以便它正常工作。

控制台应用程序没有 EF 引用,但在尝试添加新引用时,它不会显示在选项列表中的任何位置,并且包括其他项目不包括 EF 引用。(我不知道为什么) 因此,我从 EF 项目中的引用中选择"实体框架",复制了它的路径,然后使用 EF 项目中的路径在控制台项目引用中进行了浏览添加。

必须有一个更好的解决方案,如果你发布它,我会选择你的作为答案。