2013-03-21 1 views
7

Sto provando a utilizzare prima le migrazioni del codice EF per creare un database se non esiste. Finora, ho avuto successo con Enabled-Migrations. Ho anche utilizzato Add-Migrations per effettuare una migrazione iniziale che crea il database. Lo script è nella direzione della migrazione e sembra corretto.L'inizializzatore MigrateDatabaseToLatestVersion non riesce a creare il database

Questo è il corpo del mio metodo principale

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>()); 
var directConfigContext = new MyDbContext(); 

Tutto quello che ho letto che dice che questo è tutto quello che serve. MyDbContext è in app.config e si presenta così:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
     <add name="MyDbContext" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=DbConfig;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
</configuration> 

Inoltre, se uso la classe DbMigrator fornito da EF, il database è costruito in modo corretto (presumibilmente utilizzando lo script iniziale di migrazione di database).

// This is how it actually works including creating the database if it doesn't exist. 
var dbMigrator = new DbMigrator(new Configuration()); 
dbMigrator.Update(); 

Da quello che ho capito, l'impostazione del inizializzatore su MyDbContext e poi istanziare che DbContext dovrebbe creare il database per l'ultima migrazione ... cosa mi manca?

risposta

7

L'istanziazione di un DbContext non esegue l'inizializzatore associato ad esso. Invece, è necessario aggiornare il database o chiamare direttamente l'inizializzatore nel database sottostante.

MyDbContext.MyEntity.Add(new MyEntity { Name = "Nelson" }); 
// Or 
MyDb.Context.Database.Initialize(true); // force the initialization 
1

La risposta accettata risolverà il problema per gli altri, ma mi è stato avere questo stesso problema con un motivo diverso: ho cancellato il mio database e modificato il modello cambiando alcune classi nel mio DbContext.

Quando ho eseguito la mia applicazione, e ha istanziato e provato a utilizzare DbContext per la prima volta, il database non è stato creato perché l'ultima migrazione non rifletteva le ultime modifiche apportate allo DbContext. Per risolvere il problema, ho semplicemente aggiunto una nuova migrazione eseguendo il comando Add-Migration sulla console di Gestione pacchetti e al successivo avvio dell'applicazione, il database è stato creato e scaricato correttamente.