5

好的,这真的让我很困惑,如果问题的标题没有准确地描述我的问题,我深表歉意。

我有一个用 C# 编写的程序,使用 Entity Framework 和 SQL Server CE。我在 Windows 7 上开发它,它工作正常。我也有一台 Windows 8.1 机器,我已经对其进行了测试,它也可以正常工作。

但是,在一些 Windows 8.1 计算机上,程序在尝试访问数据库时会立即崩溃。我收到以下错误:

未处理的异常:System.InvalidOperationException:找不到具有不变名称“System.Data.SqlServerCe.3.5”的 ADO.NET 提供程序的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分注册。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882

现在,这真的让我很困惑,因为我的项目 (4.0) 上安装了用于 SQL Server CE 的最新 NuGet 包。my app.config我使用 SQL Server CE 工具箱显式创建了一个 SQL Server CE 4.0 数据库,我将 4.0 dll 与应用程序一起分发,并且我在文件 ( invariantName="System.Data.SqlServerCe.4.0")中明确列出了 4.0 版本。

那么,为什么错误说System.Data.SqlServerCe.3.5?为什么这个错误只发生在几台 Windows 8.1 机器上?

(我还搜索了整个解决方案,文本“3.5”甚至没有出现在任何地方。)

我发现了类似的错误,我尝试(从 这个问题)包括这个:

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}

没有效果,我仍然得到相同的确切答案。

无论如何,如果有人有任何想法,我将不胜感激任何形式的投入。

4

4 回答 4

5

我认为问题在于您的系统中安装了两个 SQL Server CE 组件。

我的解决方案:

<DbProviderFactories>
    <remove invariant="System.Data.SqlServerCe.3.5" />
    <remove invariant="System.Data.SqlServerCe.4.0" />

    <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.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
于 2016-11-29T08:18:16.807 回答
4

我有同样的问题,并根据这个链接解决了。

在您的 App.config 中找到此部分:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

并更改oldVersion="0.0.0.0-4.0.0.1"oldVersion="4.0.0.0-4.0.0.1"

于 2015-01-30T15:54:43.883 回答
1

检查您的配置文件并添加一个条目,DbProviderFactories如下所示:

<system.data>
  <DbProviderFactories>
     <remove invariant="System.Data.SqlServerCe.4.0" />
    <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>
</system.data>
于 2015-01-30T16:14:50.083 回答
0

Take a look at your project references, you may be referencing to the wrong dll

于 2014-08-01T08:54:15.573 回答