【问题标题】:C# program is looking for sql server compact 3.5, but I'm using 4.0C#程序正在寻找sql server compact 3.5,但我使用的是4.0
【发布时间】:2014-08-01 08:51:46
【问题描述】:

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

我有一个用 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 包。我使用 SQL Server CE 工具箱显式创建了一个 SQL Server CE 4.0 数据库,我将 4.0 dll 与应用程序一起分发,并且我在my app.config 文件 (invariantName="System.Data.SqlServerCe.4.0") 中明确列出了 4.0 版本。

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

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

我发现了类似的错误,并尝试(来自this question)包含以下内容:

private volatile Type _dependency;

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

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

无论如何,如果有人有任何想法,我将不胜感激。

【问题讨论】:

  • 我怀疑这与它有什么关系,但是您的项目使用的是什么版本的 .NET 框架?

标签: c# sql-server-ce-4 sql-server-ce-3.5


【解决方案1】:

我认为问题在于您的系统中安装了两个 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>

【讨论】:

  • 我从我的机器上卸载了 ce 3.5。这为我解决了错误。
【解决方案2】:

我遇到了同样的问题,并根据this link解决了它。

在您的 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"

【讨论】:

    【解决方案3】:

    检查您的配置文件并为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>
    

    【讨论】:

      【解决方案4】:

      看看你的项目引用,你可能引用了错误的 dll

      【讨论】:

      • 我只是仔细检查了三遍。我删除了所有引用,卸载了实体框架,重新安装了它,并添加了正确的 dll。还是一样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多