我进行了搜索,但没有找到与我的情况完全匹配的答案。但是我在博客上得到了一个想法,提到 machine.config 文件中的格式错误。在查看它时,我发现了这个非常关键的部分:
<system.data>
<DbProviderFactories>
<add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add name="OleDb Data Provider" invariant="System.Data.OleDb" description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<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"/>
<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.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>
</system.data>
在我的 machine.config 文件中,DbProviderFactories 部分为空。我尝试添加它但无法添加,因为它已被某个应用程序锁定。另一方面,我的客户可能会遇到同样的问题,我很难让他们编辑 machine.config。所以我用简单的方法做到了:将该部分添加到我的应用程序配置文件中!瞧!一切恢复正常。我的应用程序再次运行良好。
但为什么它在我之前的 Windows 安装中起作用?为什么这部分不总是添加到 machine.config 中?为什么在 SqlCe 4.0 和 EntityFramework 5.0 的演示示例中从未提及 DbProviderFactories 作为先决条件?这可能只是 .Net Framework 4.5 中的一个问题吗?