static MyContext()
{
var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
if(type == null)
throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer");
}
public class MyConfiguration : DbConfiguration
{
public MyConfiguration()
{
this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
}
}
namespace a.b.c
{
using System.Data.Entity;
public partial class WorkflowDBContext : DbContext
{
public WorkflowDBContext()
: base("name=WorkflowDBConnStr")
{
}
public virtual DbSet<WorkflowDefinition> WorkflowDefinitions { get; set; }
public virtual DbSet<WorkflowInstance> WorkflowInstances { get; set; }
public virtual DbSet<EngineAlert> EngineAlerts { get; set; }
public virtual DbSet<AsyncWaitItem> AsyncWaitItems { get; set; }
public virtual DbSet<TaskItem> TaskItems { get; set; }
public virtual DbSet<TaskItemLink> TaskItemLinks { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
private void FixEfProviderServicesProblem()
{
// The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
// for the 'System.Data.SqlClient' ADO.NET provider could not be loaded.
// Make sure the provider assembly is available to the running application.
// See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
}
}
在我的情况下,一切正常,然后突然停止工作,因为我认为Resharper改变了导致问题的一些变化 . 我的项目分为数据层,服务和表示层 . 我在我的数据层中安装并引用了Entity框架,但仍然没有错误't go away. Uninstalling and reinstalling didn'工作 . 最后,我通过 making the data layer the Startup project, making migration, updating the database and changing the Startup project back to my presentation layer 解决了它 .
30 回答
将以下内容添加到您的app.config中 .
这些都不适合我 . 我确实在another stackoverflow question找到了解决方案 . 我会在这里添加它以便于参考:
我今天遇到了这个问题 . 我有数据存储库类库和EF63 NuGet包以及用于测试的控制台应用程序,它们仅参考类库项目 . 我创建了非常简单的post-build命令,它将EntityFramework.SqlServer.dll从类库的Bin \ Debug文件夹复制到控制台应用程序的Bin \ Debug文件夹,问题解决了 . 不要忘记将entityFramework部分添加到控制台应用程序的.config文件中 .
您无需在控制台应用程序中安装Entity Framework,只需添加对程序集EntityFramework.SqlServer.dll的引用即可 . 您可以将此程序集从使用Entity Framework的类库项目复制到LIB文件夹并添加对它的引用 .
综上所述:
类库应用程序:
安装实体框架
编写数据层代码
app.config文件具有与实体框架相关的所有配置,连接字符串除外 .
创建控制台,Web或桌面应用程序:
添加对第一个项目的引用 .
添加对EntityFramework.SqlServer.dll的引用 .
app.config / web.config具有连接字符串(请记住,配置条目的名称必须与DbContext类的名称相同 .
我希望它有所帮助 .
在将Entity Framework 6与SQL Server Compact 4.0一起使用时,我遇到了同样的错误 . 关于EF6的Entity Framework Providers的MSDN文章很有帮助 . 在Package Manager Console中以nuget包的形式运行相应的提供程序命令可能会解决问题,因为NuGet包也会自动将注册添加到配置文件中 . 我跑了
PM> Install-Package EntityFramework.SqlServerCompact
来解决问题 .由于消息显示我们需要添加提供程序System.Data.SqlClient,这就是为什么我们需要安装具有两个dll的EntityFramework的nuget包但如果我们只开发控制台应用程序那么我们只需要添加EntityFramework.SqlServer.dll的引用
我几乎尝试了以上所有内容并没有任何效果 .
只有当我在默认项目
EntityFramework
和EntityFramework.SqlServer
属性Copy Local
中将引用的DLL设置为True
时才开始工作!我有同样的错误 . 奇怪的是,每当我使用dbContext查询任何模型或获取其列表时,它才会发生:
我们尝试重新安装实体框架,正确引用它但无济于事 .
幸运的是,我们尝试检查Nuget的
ALL
解决方案,然后更新所有内容或确保everything
是相同的版本,因为我们注意到这两个项目在Web项目上有不同的EF版本 . 它有效 . 错误消失了 .以下是有关如何为所有解决方案管理Nuget的屏幕截图:
删除BIN-Folder为我做了
如果忘记 include "EntityFramework.SqlServer.dll". ,您也可以看到此消息
它似乎是EF6中新添加的文件 . 最初我没有将它包含在我的合并模块中,并遇到了此处列出的问题 .
而不是将EntityFramework.SqlServer添加到主机项目,您可以确保从您的模型/实体项目中对它进行静态引用,如下所示
这将使构建过程包括与主机项目的程序集 .
更多关于我博客的信息http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/
我需要你的每个人注意两个DLL EntityFramework.dll和EntityFramework.SqlServer.dll是DataAccess图层库在视图或任何其他层中使用它们是不逻辑的 . 它解决了你的问题,但它不符合逻辑 .
logical way is that enitiess attribute remove and replace them with Fluent API.this is real solution
您已将EF添加到类库项目中 . 您还需要将它添加到引用它的项目(您的控制台应用程序,网站或其他) .
您应该强制对EntityFramework.SqlServer.dll程序集进行静态引用,但不是放置虚拟代码,而是可以以更漂亮的方式执行此操作:
添加此功能
到库类中的数据库上下文类和缺失DLL EntityFramework.SqlServer.dll将被复制到正确的位置 .
.
当您通过
Nuget
安装Entity Framework 6时 . EntityFramework.SqlServer有时会错过另一个可执行文件 . 只需将Nuget
包添加到该项目即可 .Sometimes above does not work for Test Project
要在Test Project中解决此问题,只需将此方法放在Test Project中:
从未调用此方法,但正如我的观察,编译器将删除所有"unnecessary"程序集,而不使用
EntityFramework.SqlServer
东西,测试失败 .注意:从模型生成数据库Sql时遇到此问题 . 它创建了所有表格,但不会导出更改 . 您需要注意的是,当您尝试使用DDL生成模板作为SSDLtoSQL10导出sql时会生成此错误 . 它在这里期待MySQL连接,因此请确保从Model属性上的下拉DDL生成模板SSDLtoMySQL中进行选择 . 花了一整天的时间!
我抛出了相同的异常 . 包括我
一切又回来了......
我也有类似的问题 . 我的问题通过以下方式解决:
展开YourModel.edmx文件并在YourModel.Context.tt下打开YourModel.Context.cs类 .
我在使用部分添加了以下行,并为我修复了错误 .
使用SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices;
每次自动生成文件时,您可能必须将此行添加到文件中 .
我有一个控制台应用程序和类库 . 在类库中,我创建了实体数据模型(右键单击类库>添加>新项>数据> ADO.NET实体数据模型6.0)并将引用放在控制台应用程序中 . 因此,您有控制台应用程序,它引用了类库和内部类库,您有EF模型 . 当我试图从表中获取一些记录时,我遇到了同样的错误 .
我按照以下步骤解决了这个问题:
右键单击解决方案并选择选项'Manage NuGet Packages for Solution',将显示NuGet包管理器窗口 .
转到'Installed packages'下的'Manage'选项提示:实体框架已添加到类库中,因此您将在'Installed packages'下拥有EntityFramework并且'll see ' Manage'option
点击'Manage'选项并检查安装包到项目,该项目引用了包含EF模型的类库(在我的情况下,我设置复选框将软件包安装到控制台应用程序,该应用程序引用了内置EF模型的类库)
这就是我必须做的一切,一切都很完美 .
我希望它有所帮助 .
我刚刚使用Nuget重新安装了Entity Framework . 并按照以下链接中的说明进行操作:http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html
我认为这个问题会得到解决 .
从CE数据库迁移到Azure上的Sql Server时,我遇到了相关问题 . 只是浪费了4小时试图解决这个问题 . 希望这可以为某人留下类似的命运 . 对我来说,我在packages.config文件中引用了SqlCE . 删除它解决了我的整个问题,并允许我使用迁移 . Yay Microsoft为另一项技术提供了不必要的复杂设置和配置问题 .
我有同样的问题,只是将App Config文件从包含DBContext的项目复制到我的测试项目
在我的情况下,一切正常,然后突然停止工作,因为我认为Resharper改变了导致问题的一些变化 . 我的项目分为数据层,服务和表示层 . 我在我的数据层中安装并引用了Entity框架,但仍然没有错误't go away. Uninstalling and reinstalling didn'工作 . 最后,我通过 making the data layer the Startup project, making migration, updating the database and changing the Startup project back to my presentation layer 解决了它 .
当测试项目中发生错误时,最漂亮的解决方案是使用以下方法修饰测试类:
今天遇到这个问题时,使用一组Web服务,每个服务在不同的项目中,以及一个包含某些服务的集成测试的单独项目 .
我已经使用EF5一段时间使用此设置,而无需在Integration Test Project中包含对EF的引用 .
现在,在升级到EF6之后,似乎我需要在集成测试项目中包含对EF6的引用,即使它没有在那里使用(几乎如上所述user3004275) .
Indications you're facing the same problem:
直接调用EF(连接到数据库,获取数据等)工作正常,只要它们是从引用EF6的项目启动的 .
通过已发布的服务接口调用服务工作正常;即服务中没有遗漏的引用"internally" .
在服务项目中,从服务外的项目调用 directly to public methods 将导致此错误,即使该项目本身未使用EF;仅在被调用项目内部
第三点是什么让我离开了一段时间,我仍然不确定为什么这是必需的 . 在我的 . 中添加一个ref到EF6集成测试项目无论如何解决了它......
引用正在使用Entity Framework的项目的启动项目需要在其bin文件夹中包含以下两个程序集:
EntityFramework.dll
EntityFramework.SqlServer.dll
将
<section>
添加到启动项目的.config文件的<configSections>
上会使该bin目录中的第一个程序集可用 . 您可以从Entity Framework项目的.config文件中复制它:要使bin文件夹中的第二个.dll可用,虽然不实用,但可以从Entity Framework项目的bin文件夹中进行手动复制 . 更好的选择是向Entity Framework项目的Post-Build事件添加以下行,这将自动化该过程:
我刚刚陷入同样的问题,看起来像EntityFramework虽然从NuGet包管理器安装没有正确安装在项目中 .
我设法通过在Package Manager Console上运行以下命令来修复它:
另外,请确保启动项目是包含dbcontext(或相关app.config)的项目 . 我正在尝试启动一个没有所有必要配置设置的网站项目 .