C#程序正在寻找sql服务器紧凑3.5,但我使用的是4.0



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

我用c#编写了一个程序,使用实体框架和SQL Server CE。我在Windows 7上开发了它,运行得很好。我也在一台Windows 8.1的电脑上测试了这款软件,它在Windows 8.1上也运行得很好。

然而,在一些Windows 8.1电脑上,程序一旦试图访问数据库就会崩溃。我得到以下错误:

Unhandled Exception: System。InvalidOperationException:没有为ADO找到实体框架提供程序。. NET提供程序具有不变名称'System.Data.SqlServerCe.3.5'。确保在应用程序配置文件的"entityFramework"部分中注册了提供程序。详见http://go.microsoft.com/fwlink/?LinkId=260882

现在,这真的让我很困惑,因为我在我的项目上安装了SQL Server CE的最新NuGet包(4.0)。我使用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"甚至没有出现在任何地方。)

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

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

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

无论如何,如果有人有任何想法,我将非常感谢任何形式的输入。

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

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

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

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

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

最新更新