Leo*_*ens 44 .net c# ado.net entity-framework entity-framework-6
我最近在一个旧项目中将实体框架从版本4或5升级/更新到版本6.现在我得到了这个例外:
EntityFramework.dll中出现"System.InvalidOperationException"类型的异常,但未在用户代码中处理
附加信息:没有为ADO.NET提供程序找到具有不变名称"System.Data.SqlClient"的实体框架提供程序.确保提供程序已在应用程序配置文件的"entityFramework"部分中注册.有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882.
我用谷歌搜索了错误并遇到了几个SO线程,但它们都没有包含适用于我的解决方案.这是我的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>
Run Code Online (Sandbox Code Playgroud)
我已经从我的项目中卸载了Entity Framework并重新安装了它,删除了所有对旧EF文件的引用并重新安装,但对我来说没有任何作用.我一直收到这个错误.
bcr*_*bcr 47
在我有一个模型项目的情况下我遇到了这个问题,该模型项目包含对EntityFramework和.SqlServer程序集的引用,以及一个使用ASP.NET MVC的单独UI项目.我想从EF 4.1升级到6.1.我实际上必须完成此处描述的部分内容:http://robsneuron.blogspot.com/2013/11/entity-framework-upgrade-to-6.html.我想强调的是,我没有向我的UI项目添加对这些项目的引用,也没有将配置添加到UI项目的web.config中,因为这些步骤会违反我关注的问题.
我所做的事是在我的模型的项目,我不得不为翻转的EntityFramework.SqlServer"复制本地"参考设置(与参考的EntityFramework,是安全的),以"假",并保存所有,拿到项目放<Private>将节点放入.csproj文件,然后将其设置回"True"并再次保存,以便True最终作为最终值.
我还必须DbContext在它的构造函数中将hack行添加到我的派生类中以强制使用程序集,即使行没有做任何事情.我从博客文章中了解到这两个步骤.
public MyContext : DbContext
{
public MyContext() : base("name=MyContext")
{
// the terrible hack
var ensureDLLIsCopied =
System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
Run Code Online (Sandbox Code Playgroud)
我要感谢我所引用的博客的作者,以及所有询问和回答SO问题的人,试图帮助我们克服这个可怕的错误.
Leo*_*ens 35
好的,这很奇怪.我有几个项目:一个是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>
Run Code Online (Sandbox Code Playgroud)
San*_*ndy 13
我刚刚解决了 您需要在解决方案中再次安装Entity Framework.遵循任何方法.
首先 =右键单击您的解决方案或项目根,然后单击Manage NuGet Packages.选择"EntityFramework",选择相应的项目,然后单击"确定".
要么
秒 =转到控制台包管理器并运行Install-Package EntityFramework.
希望能帮助到你.
亨德利的回答是100%正确的.我的应用程序遇到了同样的问题,其中存储库项目使用封装EF db context操作的方法处理数据库.其他项目使用此存储库,我不想在这些项目中引用EF.不知怎的,我觉得这不合适,我只需要在存储库项目中使用EF.无论如何,将EntityFramework.SqlServer.dll复制到其他项目输出目录解决了这个问题.为避免出现问题,当您忘记复制此dll时,可以更改存储库构建目录.转到存储库项目的属性,选择Build选项卡,在output部分中,您可以将输出目录设置为其他项目的构建目录.当然,这只是解决方法.也许在某些地方提到的黑客更好:
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
Run Code Online (Sandbox Code Playgroud)
不过,出于开发目的,这已经足够了.稍后,在准备安装或发布时,您可以将此文件添加到包中.
我对EF很新.有没有更好的方法来解决这个问题?我不喜欢"黑客" - 它让我觉得有些东西"不安全".
小智 5
我在DBContext中使用下面的代码解决了这个问题
public partial class Q4Sandbox : DbContext
{
public Q4Sandbox()
: base("name=Q4Sandbox")
{
}
public virtual DbSet Employees { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
}
感谢SO成员.
| 归档时间: |
|
| 查看次数: |
102408 次 |
| 最近记录: |