2014-07-26 12 views
7

Sono più aggiornato sull'uso di Code First in C#. dopo aver attivato la migrazione nel mio progetto e lancio il mio sito, ho un errore:Il metodo 'ExecuteAsync' nel tipo 'System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy' non ha un'implementazione

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. 

ho definito la classe del contesto, come di seguito.

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

e ho cercato di creare il DB in Global.asax come di seguito.

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

Ho provato a cercare il motivo ma non ho avuto idea. Qualche suggerimento? Grazie in anticipo.

risposta

3

Se si seleziona la versione .NET di due asseblies:

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

Vedrete che EntityFramework .SqlServer ha la dipendenza .NET v4.0, ma EntityFramework utilizza v4.5. Questa è la radice del problema. Io uso lo strumento dotpeek per verificare la versione dell'assieme (there are other options from stack overflow to check .net vestion of an assembly).

Nota: e in realtà quando si decompila EntityFramework.SqlServer.dll utilizzando lo strumento reflector jetBrains, si scoprirà che non esiste un metodo ExecuteAsync.

Quello che dobbiamo fare per risolvere il problema è usare nuget.exe (da visual studio o da eseguibile nuget stand alone: ​​please find "latest nuget.exe"). E eseguilo dalla riga di comando:

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

Un download di EF 6 sarà scaricato. Utilizzare EntityFramework e EntityFramework.SqlServer dalla cartella .net v4.5.

+0

Grazie - mi ha salvato –

0

mi ha fatto +1 @Spirit's answer per avermi alla radice del problema, ma sono stato in grado di risolvere il problema per me stesso per la ricerca attraverso tutti i file *.csproj nella soluzione e la sostituzione

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

con

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

Ho avuto un mix di utilizzi nei progetti. Il mio sintomo era che NCruch avrebbe ottenuto l'eccezione su un test, ma l'esecuzione dello stesso test dal corridore di test NUnit sarebbe passata perfettamente.

0

Ho affrontato questo tema nel mio lavoro, e ha cercato soluzioni proposte senza fortuna, ma la soluzione che ha funzionato per noi è stato quello di utilizzare un relativamente vecchia versione di Entity Framework, abbiamo utilizzato la versione 6.0.0 mentre l'ultimo (come del tempo sto scrivendo questa risposta) è 6.1.3

il problema con me era che il mio progetto si indirizzava .Net Framework 2.0, e improvvisamente quando aggiornato a .Net Framework 4.6.1 un avvertimento apparso così ho cercato di aggiornare il pacchetto Entity Framework, che era sul ultimo 6.1.3, ma ha smesso di funzionare correttamente e ha ottenuto l'eccezione sopra menzionata.

Spero che questo possa aiutare qualcuno più tardi.