“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工具检查程序集版本( 堆栈溢出还有其他选项来检查程序集的.net 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。
希望这会有所帮助。