- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
好吧,这个真的让我很困惑,如果问题的标题没有准确描述我的问题是什么,我深表歉意。
我有一个用 C# 编写的程序,使用 Entity Framework 和 SQL Server CE。我在 Windows 7 上开发它,它运行良好。我也有一台我测试过的 Windows 8.1 机器,它也能正常工作。
但是,在少数 Windows 8.1 计算机上,程序在尝试访问数据库时立即崩溃。我收到以下错误:
Unhandled Exception: System.InvalidOperationException: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlServerCe.3.5'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
现在,这真的让我感到困惑,因为我在我的项目 (4.0) 上安装了用于 SQL Server CE 的最新 NuGet 包。我使用 SQL Server CE 工具箱显式创建了一个 SQL Server CE 4.0 数据库,我随应用程序分发了 4.0 dll,并且我在 my app.config
文件中明确列出了 4.0 版( invariantName="System.Data.SqlServerCe.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);
}
没有效果,我仍然得到相同的确切答案。
无论如何,如果有人有任何想法,我将不胜感激。
最佳答案
我认为问题出在您的系统中安装了两个 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>
关于C# 程序正在寻找 sql server compact 3.5,但我使用的是 4.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25076351/
我是一名优秀的程序员,十分优秀!