2013-11-27 18 views
11

Używamy Entity Framework 4.4 i używamy migracji. Baza danych już istnieje i musimy ją aktualizować regularnie. Jednak metoda nasienna nie jest wywoływana i dlatego wartości odnośników nie są dodawane.Metoda Entity Framework Seed nie jest nazywana

Kod wygląda następująco:

internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext> 
{ 
     public Configuration() 
     { 
      AutomaticMigrationsEnabled = false; 
      SetSqlGenerator("System.Data.SqlClient", new OurSqlServerMigrationSqlGenerator()); 
     } 

     protected override void Seed(KinectionDbContext context) 
     { 
      SeedLookupTables(context); 
     } 

     private static void SeedLookupTables(KinectionDbContext context) 
     { 
      context.Titles.AddOrUpdate(t => t.Value, 
       new Title {Value = "Mr"}, 
       new Title {Value = "Mrs"}, 
       new Title {Value = "Miss"}, 
       new Title {Value = "Ms"}, 
       new Title {Value = "Dr"} 
      ); 

      context.SaveChanges(); 
     } 

} 


public class MyDbContext : ObjectContext 
    { 
     public MyDbContext() 
     { 

     } 

     static MyDbContext() 
     { 
      Database.SetInitializer<KinectionDbContext>(null); 
     } 

     public DbSet<Title> Titles { get; set; } 

} 

I wzywamy:

Add-Migration Seed 

Ale migracji pojawia się pusta.

Czy ktoś ma pomysł, dlaczego Seed jest wywoływany cmot i dlaczego dodatkowe wartości w tabeli odnośnika nie są wykrywane?

Dzięki N

Odpowiedz

23

Sposób Migracje Seed

biegnie gdy polecenie PowerShell Update-baza danych jest wykonany

Trzeba zadzwonić Update-Database nie Add-Migration

Add-Migration scać opróżnia plik migracji zawierający polecenia do migracji bazy danych do nowej wersji. Jest pusty, ponieważ nie ma zmian schematu. Nie trzeba zadzwonić Add-Migration przed wywołaniem Update-Database jeśli wszystko, co chcesz zrobić, to nasienie

Referencje:

Code first Db initialization strategies.
Code first migrations recommended reading
Managed Migrations
Database initializer and Migrations Seed methods

+0

Dziękuję, że pracował :). Czy istnieje jednak sposób na uzyskanie skryptu sql dla wysiewu? –

+0

Zobacz odpowiedź tutaj: http://stackoverflow.com/a/18190509/150342 – Colin

+0

aktualizacja migracji zwraca worek błędów, ponieważ w mojej metodzie seed użyłem plików lub innej implementacji logicznej –