“System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy”类型中的方法“ExecuteAsync”没有实现

我是在c#中使用Code First的新手。 在我的项目中启用迁移并启动我的网站后,出现错误:

Method 'ExecuteAsync' in type 'System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy' from assembly 'EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' does not have an implementation. 

我已经定义了上下文类,如下所示。

 namespace MyOA.Migration.Contexts { public class OADBContext : DbContext { public OADBContext() { } } } 

我尝试在Global.asax中创建数据库,如下所示。

 protected void Application_Start() { // Forces initialization of database on model changes. using (var context = new Migration.Contexts.OADBContext()) { context.Database.Initialize(force: true); } } 

我试图搜索原因但不知道。 有什么建议? 提前致谢。

如果检查两个组件的.NET版本:

  • EntityFramework(v4.5)
  • EntityFramework.SqlServer(v4.0)

您将看到EntityFramework.SqlServer具有v4.0 .NET依赖性,但EntityFramework使用v4.5。 这是问题的根源。 我使用dotpeek工具检查程序集版本( 堆栈溢出还有其他选项来检查程序集的.n​​et vestion )。

注意:当您使用jetBrainsreflection器工具反编译EntityFramework.SqlServer.dll时,您会发现没有ExecuteAsync方法。

我们要解决的问题是使用nuget.exe(来自visual studio或独立的nuget可执行文件: 请找到“最新的nuget.exe” )。 并从命令行运行它:

 cd "[path to your nuget.exe]" nuget Install EntityFramework 

将下载一组EF 6 assemblis。 使用.net v4.5文件夹中的EntityFramework和EntityFramework.SqlServer。

我为@ Spirit的答案指出了问题的根源,但我能够通过搜索解决方案中的所有*.csproj文件并替换它来为自己修复它

 packages\EntityFramework.6.1.3\lib\net40\EntityFramework.dll ^^^^^ 

 packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll ^^^^^ 

我在项目中有各种各样的用法。 我的症状是NCruch会在测试中得到exception,但是从NUnit测试运行器运行相同的测试会很好。

我在工作中遇到了这个问题,尝试了没有运气的建议解决方案,但为我们解决的解决方案是使用相对较旧版本的Entity Framework,我们使用版本6.0.0而最新版本(截至我的时候)我写下这个答案是6.1.3

我的问题是我的项目是针对.Net Framework 2.0 ,突然升级到.Net Framework 4.6.1出现警告,所以我尝试更新最新的6.1.3上的Entity Framework包,但是它停止了工作正确,并得到上述exception。

希望这会有所帮助。