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

时间:2015-09-08 15:24:16

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

尝试使用Entity Framework 6在项目中运行集成测试导致错误:

  

SetUp:System.NotSupportedException:无法确定类型的提供程序工厂的提供程序名称   'System.Data.SqlClient.SqlClientFactory'。确保ADO.NET   provider已在应用程序配置中安装或注册。

但同一个项目的测试在我的几个同事的机器上运行得非常好,我没有本地的变化。

尝试重新安装EF,I don't have any unnecessary config sectionsGlimpseI've tried targeting a different version of the framework,但错误仍然存​​在......

1 个答案:

答案 0 :(得分:6)

事实证明,我的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>      

解决了这个问题。