C#程序正在寻找sql server compact 3.5,但我使用的是4.0

Ste*_*ies 5 c# sql-server-ce-4 sql-server-ce-3.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.

现在,这真让我感到困惑,因为我在我的项目中安装了最新的SQL Server CE NuGet包(4.0).我使用SQL Server CE工具箱显式创建SQL Server CE 4.0数据库,我使用应用程序分发了4.0 dll,并且我明确地在my app.configfile(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);
}
Run Code Online (Sandbox Code Playgroud)

没有效果,我仍然得到同样的答案.

无论如何,如果有人有任何想法,我会非常感谢任何形式的投入.

小智 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>
Run Code Online (Sandbox Code Playgroud)


Kai*_*iff 0

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