方法& # 39;ExecuteAsync& # 39;System.Data.Entity.SqlServer.Def
本文关键字:SqlServer Def Entity ExecuteAsync 方法 System Data | 更新日期: 2023-09-27 18:14:48
我是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.
我已经像下面这样定义了context类。
namespace MyOA.Migration.Contexts
{
public class OADBContext : DbContext
{
public OADBContext() { }
}
}
,我试图在全局创建DB。
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。(v4.0)状态"置疑"
你会看到EntityFramework。SqlServer依赖于v4.0 . net,但EntityFramework使用v4.5。这是问题的根源。我使用dotpeek工具检查程序集版本(还有其他选项从堆栈溢出检查程序集的。net版本)。
注意:当你使用jetBrains反射器工具反编译EntityFramework.SqlServer.dll时,你会发现没有ExecuteAsync方法。
我们要做的是解决这个问题是使用nuget.exe(从visual studio或从独立的nuget可执行文件:请找到"最新的nuget.exe")。并从命令行运行它:
cd "[path to your nuget.exe]"
nuget Install EntityFramework
将下载一组EF 6程序集。使用EntityFramework和EntityFramework。SqlServer from .net v4.5 folder.
我+ 1d @Spirit的答案指向我的问题的根源,但我能够通过搜索解决方案中的所有*.csproj
文件并替换
packages'EntityFramework.6.1.3'lib'net40'EntityFramework.dll
^^^^^
packages'EntityFramework.6.1.3'lib'net45'EntityFramework.dll
^^^^^
我在项目中有多种用法。我的症状是NCruch会在测试中得到异常,但从NUnit测试运行器运行相同的测试将通过很好。
我在工作中遇到了这个问题,并尝试了建议的解决方案,但没有运气,但为我们解决的解决方案是使用相对较旧的版本的实体框架,我们使用版本6.0.0
而最新的(截至我写下这个答案的时候)是6.1.3
我的问题是,我的项目是针对.Net Framework 2.0
,突然升级到.Net Framework 4.6.1
时出现警告,所以我试图更新实体框架包,这是在最新的6.1.3
,但它停止正常工作,并得到上述例外。
我有同样的问题,但原因是不同的。C:'Windows' microt.net 'Framework'v4.0.30319'Temporary ASP. exe. NET Files"文件夹中,有几个版本的实体框架dll。毫无疑问是旧版本。我已经回收了iis池并重新启动了计算机,但这不起作用。我不得不删除那个文件夹里的所有文件,这样就成功了。
由于所有类似的S/O问题都指向这个问题,我将留下另一个想法来考虑。检查以确保EntityFramework没有偶然安装到您的GAC中。IIS将采用GAC版本而不是您的bin版本,这会导致一些严重的头痛