当我使用sqlce 4.0 with entityframework 6.0
时出现以下错误No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlServerCe.4.0'
我的app.config看起来像这样
....
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, 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" />
</providers-->
</entityFramework>
<connectionStrings>
<add name="FbMultipleInsOrderContainer" connectionString="metadata=res://*/FbMultipleInsOrder.csdl|res://*/FbMultipleInsOrder.ssdl|res://*/FbMultipleInsOrder.msl;provider=System.Data.SqlServerCe.4.0;provider connection string="data source=|DataDirectory|\FBMultipleOrderSync.sdf"" providerName="System.Data.EntityClient" />
</connectionStrings>
...
我尝试重新安装EF 6.但无济于事。
任何关于此的线索都会非常明显。
答案 0 :(得分:56)
安装EntityFramework.SqlServerCompact nuget包后,检查您的app.config是否包含以下内容(根据@ ErikEJ上面的评论):
<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>
(即使你真的不需要,也可以留下SqlClient的行。)
答案 1 :(得分:21)
EntityFramework.SqlServerCompact
我尝试按照建议的答案,但没有意识到我没有App.config引用所需的NuGet包。
答案 2 :(得分:6)
我在单元测试中遇到了这个问题。棘手的是错误不是经常出现的。 我设法通过添加以下类来解决它我的单元测试解决方案:
public static class Trick
{
public static void FixEfProviderServicesProblem()
{
// this commented line should be used for SQL Server provider
//var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
// this is used for SQL Server CE provider
var instance = System.Data.Entity.SqlServerCompact.SqlCeProviderServices.Instance;
}
}
答案 3 :(得分:5)
要实现此目的,您只需在Package Manager控制台中注册EntityFramework.SqlServerCompact
,
要打开电源管理器控制台并输入以下命令:
PM> Install-Package EntityFramework.SqlServerCompact
答案 4 :(得分:1)
我的问题是单元测试。您可能只为项目安装了Entity框架,但没有安装单元测试。为此:
右击&#34;解决方案&#34;在解决方案资源管理器中(不是您的项目名称)
点击&#34;管理NuGet包&#34;
搜索EntityFramework并按下
您可能看不到[项目名称]旁边的勾号。测试
答案 5 :(得分:1)
用户PC上出现此错误。用户忽略了先前的错误“'DbProviderFactories'部分每个配置文件只能出现一次”。
显然,DB2通过添加重复(和空)<DbProviderFactories />
标记来损坏其PC上的计算机配置文件。
解决方案是删除空的重复标记。机器配置文件位于[WindowsDir] \ Microsoft.Net \ Framework [.NET Version] \ Config \ Machine.config
答案 6 :(得分:1)
解决此问题
Visual Studio菜单 - &gt;工具 - &gt; NuGet包管理器 - &gt;管理NuGet包以获得解决方案
选择&#39;浏览&#39;选项卡并搜索以下&#39; EntityFramework.SqlServerCompact &#39;
安装它。
它应该有用。
答案 7 :(得分:1)
提供的解决方案是正确的,但它没有解释为什么EF需要这个程序集。这就是为什么......
默认情况下,EF的配置允许您拥有&#34; defaultConnectionFactory&#34; uder entityFramework部分。此默认工厂配置为&#34; LocalDbConnectionFactory&#34;它的参数是&#34; mssqllocaldb&#34;。
这个工厂内部需要&#34; SqlServerCe.4.0&#34;即&#34; SqlServerCompact&#34;。
仅当EF在DbContext中使用其默认连接字符串时才会发生错误。如果在配置中为EF提供了一些其他指定的连接字符串,则不会出现此错误。因为默认情况下EF使用默认连接工厂。
安装&#34; SqlServerCe 4.0&#34;改变EF的配置和&#34; LocalDbConnectionFactory&#34;它的参数是&#34; mssqllocaldb&#34;被替换为&#34; SqlServer Ce 4.0&#34;。并且EF运行时也能够找到SqlServerCe4.0程序集(因为它现在是您的引用的一部分并且实际放置在您的BIN中)。
以下是安装Sql Server Compact之前和之后的EF Config
OLD配置:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
新配置如下:
<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>
并且还添加了以下部分来描述新工厂
<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>
答案 8 :(得分:0)
不要忘记Package Manager Console将app.config / web.config从选定的Startup项目中取出来!
答案 9 :(得分:0)
对我来说,因为程序员不仅仅是一个,一些程序员已经安装了EntityFramework.SqlServerCompact,但是当我拉入我的PC并且RUN显示上面的错误信息时,我只是卸载并重新安装。
答案 10 :(得分:0)
在Visual Studio中,loginFormId
文件夹中存在的所有hidden
文件都需要设置为.dll
:_bin_deployableAssemblies
对我来说,所有.dll文件都设置为Build Action
。
这是我设置的,它在之后立即起作用:
答案 11 :(得分:0)
我将下面的提供程序代码添加到data_hum = pd.melt(data,id_vars=['time'],value_vars=['hum_1','hum_2'])
fig = go.Figure()
fig.add_trace(go.Scatter(x=data_hum['time'], y=data_hum['hum_1'],
mode='lines+markers',
name='Legend label 1'))
fig.add_trace(go.Scatter(x=data_hum['time'], y=data_hum['hum_2'],
mode='lines+markers',
name='Legend label 2'))
,并同时安装Web.config
软件包,然后解决问题。
如果缺少一个,它将失败。
EntityFramework.SqlServerCompact