方法& # 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);
    }    
}

我试图寻找原因,但不知道。有什么建议吗?

方法& # 39;ExecuteAsync& # 39;System.Data.Entity.SqlServer.Def

如果检查两个程序集的。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版本,这会导致一些严重的头痛