Odpowiedz

11

Nie zapewniają sposobu, aby to zrobić do czasu RTM, w którym to momencie obiecali aplikację wiersza poleceń i dostawcę msdeploy. Źródło: http://blogs.msdn.com/b/adonet/archive/2011/11/29/code-first-migrations-beta-1-released.aspx

Oczywiście, że nie jest zadowolony z tego, polecenie PowerShell jest przechowywany w katalogu pakietów i jest zwykły tekst, wydaje się po prostu załadować do zespołu o nazwie EntityFramework.Migrations.Commands zapisane w tym samym katalogu.

Śledzenie za pośrednictwem tego zespołu wymyśliłem następujący

public class MyContext : DbContext 
{ 
    static MyContext() 
    { 
    DbMigrationsConfiguration configuration = new DbMigrationsConfiguration() { 
     MigrationsAssembly = typeof(MyContext).Assembly, 
     ContextType = typeof(MyContext), 
     AutomaticMigrationsEnabled = true,     
    }; 

    DbMigrator dbMigrator = new DbMigrator(configuration);   
    dbMigrator.Update(null);    
    } 
} 

UPDATE: po trochę eksperymentów zorientowali się kilka rzeczy

  • Przeprowadzanie aktualizacji w statycznym konstruktorze dla Twojego kontekst jest zły, ponieważ przerywa polecenia powłoki powers, znacznie lepiej jest dodać kod do uruchamiania aplikacji w inny sposób (Global.asax, WebActivator lub Main method)
  • Powyższy kod działa tylko przy użyciu AutomaticMi należy ustawić obszar MigrationsNames, aby był on uruchamiany ręcznie utworzone migracje.
  • Utworzona klasa konfiguracyjna powinna już istnieć w projekcie (dodana podczas instalowania pakietu migracyjnego nuget), więc po prostu utworzę tę wersję.

co oznacza, że ​​kod jest uproszczona do

DbMigrator dbMigrator = new DbMigrator(new NAMESPACE.TO.MIGRATIONS.Configuration()); 
dbMigrator.Update(null);   
+3

Należy zauważyć, że jest to obecnie nieaktualne, RTM EF 4.3 zawiera nowy inicjator bazy danych o nazwie MigrateDatabaseToLatestVersion. Aby uzyskać więcej informacji, zobacz http://stackoverflow.com/questions/9281423/entity-framework-4-3-run-migrations-at-application-start. – Betty

+0

Chociaż ustawienie inicjatora w konstruktorze kontekstu wydaje się zakłócać skrypty powłoki. Powróciłem do używania modułu app_start z powyższym kodem. – Betty

4

Kolejne opcje dla tego problemu jest dodanie

Database.SetInitializer<MyContext>(new MigrateDatabaseToLatestVersion<MyContext, NAMESPACE.TO.MIGRATIONS.Configuration>()); 

linię do Global.asaxApplication_Start metody.

Powiązane problemy