2013-03-21 12 views
7

Próbuję użyć pierwszych migracji kodu EF do zbudowania bazy danych, jeśli nie istnieje. Do tej pory udało mi się pomyślnie wykonać Enabled-Migrations. Użyłem także Add-Migrations do wykonania początkowej migracji, która buduje bazę danych. Skrypt jest w kierunku Migracje i wygląda poprawnie.Inicjator MigrateDatabaseToLatestVersion nie może utworzyć bazy danych

To jest ciało moje główne metody

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

Wszystko Czytałem, że mówi to wszystko, czego potrzebuję. MyDbContext jest w app.config i wygląda następująco:

<?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> 

Dodatkowo, jeśli mogę użyć klasę DbMigrator dostarczone przez EF, baza danych jest poprawnie zbudowane (prawdopodobnie za pomocą wstępnego scenariusza migracji bazy danych).

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

Z tego co rozumiem, ustawienie inicjator na MyDbContext a potem uruchamianiu że DbContext należy utworzyć bazę danych do najnowszej migracji ... Czego mi brakuje?

Odpowiedz

7

Tworzenie instancji klasy DbContext nie powoduje włączenia inicjalizatora. Zamiast tego należy zaktualizować bazę danych lub bezpośrednio wywołać inicjator w bazowej bazie danych.

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

Zaakceptowanych odpowiedź rozwiąże problem dla innych ludzi, ale miałem ten sam problem z innego powodu: Usunąłem mojej bazy danych i modyfikować model poprzez zmianę niektórych klas w moim DbContext.

Po uruchomieniu aplikacji po raz pierwszy uruchomiono i próbowałem użyć DbContext, baza danych nie została utworzona, ponieważ ostatnia migracja nie odzwierciedlała ostatnich zmian wprowadzonych w DbContext. Aby rozwiązać problem, po prostu dodałem nową migrację, uruchamiając polecenie Add-Migration na konsoli menedżera pakietów, a przy następnym uruchomieniu aplikacji baza danych została poprawnie utworzona i stała.

Powiązane problemy