2014-07-26 3 views
7

Ich bin neuer über die Verwendung von Code First in C#. Nachdem ich Migration in meinem Projekt und starten Sie meine Website aktiviert, erhalte ich einen Fehler:Methode 'ExecuteAsync' im Typ 'System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy' hat keine Implementierung

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. 

I, wie unten die Kontextklasse definiert haben.

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

und ich habe versucht, die DB in Global.asax wie folgt zu erstellen.

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

Ich versuchte, den Grund bekam aber keine Ahnung zu suchen. Irgendwelche Vorschläge? Vielen Dank im Voraus.

Antwort

3

Wenn Sie die .NET-Version der beiden asseblies überprüfen:

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

Sie, dass EntityFramework sehen .SqlServer hat v4.0 .NET-Abhängigkeit, aber EntityFramework verwendet v4.5. Das ist die Ursache des Problems. Ich benutze dotpeek Werkzeug zur Überprüfung der Montageversion (there are other options from stack overflow to check .net vestion of an assembly).

Hinweis: und wirklich, wenn Sie EntityFramework.SqlServer.dll mit JetBrains Reflektor-Tool zu dekompilieren, finden Sie, dass es keine ExecuteAsync-Methode gibt.

Was wir tun müssen, um das Problem zu beheben, ist nuget.exe (von Visual Studio oder Standalone nuget ausführbar: please find "latest nuget.exe") zu verwenden. Und es von der Kommandozeile:

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

Eine Reihe von EF 6 ASSEMBLIS heruntergeladen werden. Verwenden Sie den EntityFramework- und EntityFramework.SqlServer aus dem .net v4.5-Ordner.

+0

Danke - gerettet mich –

0

I + 1'd @Spirit's answer für den Hinweis mich an der Wurzel des Problems, aber ich konnte es für mich beheben, indem Sie in der Lösung durch all die *.csproj Dateien suchen und

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

ersetzt mit

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

Ich hatte eine Mischung von Nutzungen in den Projekten. Mein Symptom war, dass NCruch die Ausnahme bei einem Test erhalten würde, aber das Ausführen des gleichen Tests von NUnit Test Runner würde gut gehen.

0

ich dieses Thema in meiner Arbeit konfrontiert und versuchte ohne Erfolg vorgeschlagenen Lösungen, aber die Lösung, die für uns ausgearbeitet war eine relativ ältere Version von Entity Framework zu verwenden, haben wir Version 6.0.0 während der letzten (wie diese Antwort der Zeit nach unten ich schreibe) ist 6.1.3

das Problem bei mir war, dass mein Projekt .Net Framework 2.0 wurde Targeting und plötzlich, wenn sie .Net Framework 4.6.1 eine Warnung aufgerüstet erschien so habe ich versucht, Entity Framework-Paket zu aktualisieren, die auf das war Letzte 6.1.3, aber es funktioniert nicht mehr ordnungsgemäß und hat die oben erwähnte Ausnahme.

Hoffe, dass dies später jemand helfen wird.