错误:未find具有不变名称“System.Data.SqlClient”的ADO.NET提供程序的entity framework提供程序
我最近升级/更新了旧的项目中的entity framework从版本4或5到版本6.现在我得到这个exception:
在EntityFramework.dll中发生types“System.InvalidOperationException”的exception,但未在用户代码中处理
附加信息:找不到具有不变名称“System.Data.SqlClient”的ADO.NET提供程序的entity framework提供程序。 确保提供程序在应用程序configuration文件的“entityFramework”部分中注册。 有关更多信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882 。
我GOOGLE了错误,并遇到了几个SO线程,但没有包含一个解决scheme,为我工作。 这就是我的App.config的样子:
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> </configuration>
我已经从我的项目中卸载了entity framework,并重新安装它,删除所有对旧EF文件的引用,并重新安装,但没有为我工作。 我不断收到这个错误。
我有这样的问题,我有一个模型项目,同时引用了EntityFramework和.SqlServer程序集,以及使用ASP.NET MVC的单独UI项目。 我想从EF 4.1升级到6.1。 我实际上不得不做一些这里描述的: http : //robsneuron.blogspot.com/2013/11/entity-framework-upgrade-to-6.html 。 我想强调的是,我没有将这些项目的引用添加到我的UI项目中,也没有将configuration添加到UI项目的web.config中,因为这些步骤会违反我对问题的分离。
我所做的是在我的模型项目中,我不得不将EntityFramework.SqlServer(和EntityFramework引用,为了安全)的“Copy Local”引用设置翻转为“False”并保存全部,以使项目将<Private>
节点添加到.csproj文件中,然后将其重新设置为“True”并再次保存,以使True成为最终值。
我也不得不在我的DbContext
类的构造函数中添加黑客行来强制使用这个程序集,即使这个行什么也不做。 我从博客文章中学到了这两个步骤。
public MyContext : DbContext { public MyContext() : base("name=MyContext") { // the terrible hack var ensureDLLIsCopied = System.Data.Entity.SqlServer.SqlProviderServices.Instance; }
我想感谢我所引用的那个博客的作者,以及所有提出并回答这些问题的人,试图帮助我们克服这个可怕的错误。
好吧,这很奇怪。 我有几个项目:一个是一个UI项目(一个ASP.NET MVC项目),其他的项目像仓库的东西。 存储库项目有EF的引用,但UI项目没有(因为它不需要,只需要引用其他项目)。 在为UI项目安装EF后,一切都开始工作。 这就是为什么,它将这段代码添加到我的Web.config中:
<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>
我有同样的问题,不同的是我没有访问源代码。 我已经解决了我的问题,把正确版本的EntityFramework.SqlServer.dll放在应用程序的bin目录下。
我刚刚解决了它。 您需要再次在您的解决scheme中安装entity framework。 按照任何方法。
首先 =右键单击您的解决scheme或项目根目录,然后单击Manage NuGet Packages
。 select“EntityFramework”,select适当的项目并点击确定。
要么
第二个 =转到控制台包pipe理器并运行Install-Package EntityFramework
。
希望能帮助到你。
亨德利的回答是100%正确的。 我和我的应用程序有同样的问题,在那里存储库项目使用封装EF数据库上下文操作的方法处理数据库。 其他项目使用这个存储库,我不想在这些项目中引用EF。 不知何故,我不觉得这是正确的,我只需要在知识库项目的EF。 无论如何,复制EntityFramework.SqlServer.dll到其他项目输出目录解决了这个问题。 为了避免问题,当你忘记复制这个DLL,你可以改变存储库的构build目录。 转到存储库项目的属性,select生成选项卡,在输出部分,可以将输出目录设置为其他项目的生成目录。 当然,这只是解决方法。 也许在某个地方提到的黑客更好:
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
尽pipe如此,为了发展的目的就足够了。 之后,在准备安装或发布时,可以将此文件添加到包中。
我对EF很新。 有没有更好的方法来解决这个问题? 我不喜欢“黑客” – 这让我觉得有什么是不安全的。
我已经解决了在我的DBContext中使用下面的代码的问题
公共部分类Q4Sandbox:DbContext { 公众Q4Sandbox() :base(“name = Q4Sandbox”) { } 公共虚拟DbSet Employees {get; 组; } 保护覆盖无效OnModelCreating(DbModelBuilder modelBuilder) { var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance; } }
感谢SO成员。
尝试添加以下运行时程序集绑定:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
我有同样的问题,唯一的工作是使用Uninstall-Package从每个项目中卸载entity framework包。 然后在整个解决scheme中再次安装。 它会要求你select你想安装的项目,你应该select全部。
我的工作是从EF 6.1.3
降级到EF 6.1.1
。
在Visual Studios 2012+
转到:
工具 – Nuget包pipe理器 – 包pipe理器控制台
然后input:
Install-Package EntityFramework.SqlServerCompact -Version 6.1.1
我不必先卸载EF 6.1.3
因为上面的命令已经做到了。
另外,我不知道它是否做了什么,但是我也在我的项目中安装了SQL Server CE。
以下是我find的解决scheme的链接:
http://www.itorian.com/2014/11/no-entity-framework-provider-found-for.html
这个问题可能是因为错误的entity framework引用,或者有时类名不匹配数据库中的实体名称。 确保表名与类名匹配。
我也有类似的问题
我的问题是通过执行以下操作来解决的: