C# 实体框架代码优先”;“未找到ADO.NET提供程序”;使用本地SQL Server CE DLL';s
我正在编写一个C#应用程序,它使用SQL Server CE 4.0文件,通过Entity Framework 6.0首先通过代码访问这些文件。(应用程序需要能够为SQL Server CE连接使用本地dll,即应用程序需要是XCOPY可部署的)。该应用程序在我的开发机器上运行良好,但在其他机器上(例如,只有Win7和.NET 4.0的VM),我得到一个C# 实体框架代码优先”;“未找到ADO.NET提供程序”;使用本地SQL Server CE DLL';s,c#,.net,entity-framework,ef-code-first,sql-server-ce,C#,.net,Entity Framework,Ef Code First,Sql Server Ce,我正在编写一个C#应用程序,它使用SQL Server CE 4.0文件,通过Entity Framework 6.0首先通过代码访问这些文件。(应用程序需要能够为SQL Server CE连接使用本地dll,即应用程序需要是XCOPY可部署的)。该应用程序在我的开发机器上运行良好,但在其他机器上(例如,只有Win7和.NET 4.0的VM),我得到一个ArgumentException: 具有固定名称“System.Data.SqlServerCe.4.0”的ADO.NET提供程序未在计算机或
ArgumentException
:
具有固定名称“System.Data.SqlServerCe.4.0”的ADO.NET提供程序未在计算机或应用程序配置文件中注册,或者无法加载。有关详细信息,请参见内部异常
内部异常消息显示:
找不到请求的.Net Framework数据提供程序。它可能没有安装
我搜索过谷歌,大多数评论都表明App.config文件是正确的。我相信我的是(默认连接工厂和提供程序部分),但以下是内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
</entityFramework>
</configuration>
构建文件夹包括以下文件(当然,除了特定于应用程序的文件外):
- EntityFramework.dll
- EntityFramework.xml
- EntityFramework.SqlServer.dll
- EntityFramework.SqlServer.xml
- EntityFramework.SqlServerCompact.dll
- EntityFramework.SqlServerCompact.xml
- sqlceca40.dll
- sqlcecompact40.dll
- sqlceer40EN.dll
- sqlceme40.dll
- sqlceqp40.dll
- sqlcese40.dll
- 确保System.Data.SqlServerCe被引用并设置为“复制” “本地”属性
- 将以下内容添加到app.config:
我今天也面临同样的问题。
在多次重新安装EF之后,解决问题的方法是在控制台项目中引用EF以及DAL项目(实际使用EF的项目)
如果您使用的引用反过来引用了EF,那么您也必须将其添加到此项目中。我也遇到了同样的问题,但没有任何效果。对我来说,解决这个问题的唯一办法是从我的机器上卸载SQL Server Compact(通过添加/删除程序)并重新安装。很抱歉响应太晚-实际上,有一个非常简单的解决方案: 如果您调查packages\EntityFramework.6.1.3\lib\net45文件夹,您会注意到其中已经存在另一个dll-EntityFramework.SqlServer
只需添加一个引用,一切都将正常工作 在我的例子中,缺少“EntityFramework.SqlServerCompact”包。只是想和大家分享一下,以防它能拯救别人的一天 ErikEJ:我错过了你的评论,去看了回复,但看起来你也有答案。对于任何从头开始的人来说,这看起来像是一个完整的教程。@ErikEJ升级到.net framework 4.5.2后,项目将中断。p、 s我下载了你的项目,这会产生同样的错误too@Shekhar“休息”?-你使用了我更新的方法吗?@ErikEJ不,我没有,看起来可能有用。thanksI返回并检查了这一点,并(通过NuGet)向每个程序集添加了EntityFramework和EntityFramework SQL Server Compact。然而,这并没有解决它。在我根据nekno的评论添加到App.Config文件后,它就成功了。我想这两个都是必需的,但我没有返回并撤消以确保。@Tim,我忘记了
App.config
。你完全正确!我回去查看了Tico评论中的参考资料(见我的回复),但没有效果。将您的建议添加到App.Config文件确实解决了这个问题,但我认为两者都是必要的(链接的文章没有指定哪些程序集需要引用)。对于任何想知道的人(我不太喜欢App.Config文件),这个直接放在里面。我可以再次代表我确认上面的评论。同样的事情再次发生在我身上,因为我不得不删除并重新安装.NET目标包,它把我所有的Visual Studio项目都搞砸了。同样,唯一有效的方法是卸载SQL Server Compact并重新安装它。
<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>