无法确定类型为'System.Data.SqlClient.SqlClientFactory'的提供程序工厂的提供程序名称。

8
尝试在使用Entity Framework 6的项目中运行集成测试时,出现以下错误:
SetUp : System.NotSupportedException:无法确定类型为“System.Data.SqlClient.SqlClientFactory”的提供程序工厂的提供程序名称。确保已安装或在应用程序配置中注册ADO.NET提供程序。
但是,在我几位同事的机器上,相同项目的测试完全正常,并且我没有进行任何本地更改。
尝试重新安装EF,我没有任何不必要的配置部分Glimpse我尝试针对不同版本的框架,但错误仍然存在...
1个回答

7
我发现我的 Framework/Framework64 的 machine.config 文件中都有一个空的、重复的 DbProviderFactories 元素,这个元素似乎是由于安装 IBM DB2 .NET 提供程序而创建的。重复的节点使得 machine.config 无效,因此这个问题只存在于我的机器上。
需要修改的是:
<DbProviderFactories>
    <add name="IBM DB2 for i5/OS .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for i5/OS" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26"/>
    <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/><add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>
<DbProviderFactories/>

移除多余的节点:

<DbProviderFactories>
    <add name="IBM DB2 for i5/OS .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for i5/OS" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26"/>
    <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/><add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>      

问题已解决。


那正是我的情况!我甚至不知道机器上安装了DB2,但在发现机器配置文件格式错误可能是问题的情况下,我也在那里找到了DB2条目。谢谢。我使用的是DotNet 4.5.2,但这与问题无关。 - gkakas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接