好的,这个让我很困惑,如果问题的标题不能准确描述我的问题,我会道歉。
我有一个用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);
}
没有效果,我仍然得到同样的答案。
无论如何,如果有人有任何想法,我会非常感谢任何形式的投入。
答案 0 :(得分: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>
答案 1 :(得分:4)
我遇到了同样的问题,并根据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"
答案 2 :(得分: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>
答案 3 :(得分:0)
看看你的项目参考,你可能会引用错误的dll