方法' ExecuteAsync'在类型' System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy'没有实施

时间:2014-07-26 03:22:26

标签: c# asp.net .net entity-framework ef-code-first

我是在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);
    }    
}

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

5 个答案:

答案 0 :(得分:3)

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

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

您将看到EntityFramework.SqlServer具有v4.0 .NET依赖性,但EntityFramework使用v4.5。这是问题的根源。我使用dotpeek工具检查程序集版本(there are other options from stack overflow to check .net vestion of an assembly)。

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

我们要解决的问题是使用nuget.exe(来自visual studio或独立的nuget可执行文件:please find "latest nuget.exe")。并从命令行运行它:

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

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

答案 1 :(得分:0)

我+ 1' d @Spirit's answer指出我问题的根源,但我能够通过搜索解决方案中的所有*.csproj文件来自行修复它取代

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

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

我在项目中混合使用。我的症状是NCruch会在测试中得到异常,但是从NUnit测试运行器运行相同的测试会很好。

答案 2 :(得分:0)

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

我的问题是我的项目定位于6.1.3,并且在升级到.Net Framework 2.0时突然出现警告,因此我尝试更新最新.Net Framework 4.6.1上的实体框架包,但它停止了正常工作,并得到了上述异常。

希望这会有所帮助。

答案 3 :(得分:0)

我遇到了同样的问题,但原因不同。在“ C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files”文件夹中,有多个版本的entityframe dll。毫无疑问,旧版本。我已经回收了iis池并重新启动了计算机,但这没有用。我必须删除该文件夹中的所有文件,然后才成功了。

答案 4 :(得分:0)

由于所有类似的S / O问题都针对此问题,因此我将考虑另一个想法。检查以确保没有偶然将EntityFramework安装到您的GAC中。 IIS将采用GAC版本取代您的bin版本,从而导致某些严重的问题。