5

Zastanawiam się, czy istnieje możliwość, ze migracja Entity Framework, aby uzyskać skrypt SQL do tworzenia zawartości mojej bazy danych łącznie ze wszystkimi danymi z mojej metody nasion w klasie konfiguracji:Pobierz skrypt do tworzenia bazy danych, w tym danych initializer

protected override void Seed(Sotasa.DAL.SqlContext context) 
{ 
    //Data I'd like to be included to the script 
} 

pomocy polecenia Update-Database nie wygląda to może być wykonane:

Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName 
<String>] [-ConfigurationTypeName <String>] -ConnectionString <String> -ConnectionProviderName <String> [<CommonParameters>] 
+0

Znaleźliście już metodę "Seed", więc czy moglibyście sprecyzować, co jeszcze nie jest jasne? –

+0

Baza danych materiału siewnego bazuje na zawartości bazy danych do nowej/istniejącej bazy danych. Chciałbym, aby wygenerowany skrypt zawierał ten plik. – mosquito87

+0

?? Pokaż kod (jakkolwiek niedojrzały) z tego, co chcesz zrobić w metodzie seed. Masz tam kontekst, dzięki czemu możesz wykonać dowolną akcję CRUD. –

Odpowiedz

0

nie jest to możliwe. (Aby uzyskać dane wygenerowane w metodzie seed generującej instrukcje SQL).

Alternatywnym rozwiązaniem jest użycie skryptu do zbudowania -> utworzenie bazy danych -> skrypt bazy danych z danymi? (PowerShell prawdopodobnie może to zrobić, dotykając w SQL obiektów Management Server.)

0

Oto co zrobiłem, nie może być tak ładne, ale to działa na nas (uwaga to dla naszego lokalnego dev i środowisk CI):

public class Configuration : DbMigrationsConfiguration<MyContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
     SetSqlGenerator(OracleConnectionInfo.InvariantName, new OracleEntityMigrationSqlGenerator()); 
    } 

    protected override void Seed(MyContext context) 
    { 
     Logger.Write("In Seed method. User: " + userName); 
     MyInitializer.AddUpdateDataSql(context); 
    } 
} 

public class MyInitializer : MigrateDatabaseToLatestVersion<MyContext, Configuration> 
{ 
    private const string Schemaname = "MYSCHEMA"; 

    public static void AddUpdateDataSql(Pronova2Context context) 
    { 
     DeleteTableData(context); 
     DropCreateSequences(context); 
     PopulateTypeTypeData(context); 
     // etc. 
    } 

    private static void DeleteTableData(DbContext context) 
    { 
     context.Database.ExecuteSqlCommand(@"delete " + Schemaname + ".T_TABLE1"); } 
     context.Database.ExecuteSqlCommand(@"delete " + Schemaname + ". T_TABLE2"); } 
     // etc. 
    } 

    private static void DropCreateSequences(DbContext context) 
    { 
     context.Database.ExecuteSqlCommand(@"DROP SEQUENCE " + Schemaname + ".T_TABLE1_SEQ"); } 
     context.Database.ExecuteSqlCommand(@"DROP SEQUENCE " + Schemaname + ".T_TABLE2_SEQ"); } 
     // etc. 
    } 

    private static void PopulateTypeTypeData(DbContext context) 
    { 
     try { context.Database.ExecuteSqlCommand(@"Insert into " + Schemaname + ".T_TYPE_TYPE (TYPE_TYPE_ID,NAME,DESCRIPTION) values (1,'TypeType1','Name 1')"); 
     try { context.Database.ExecuteSqlCommand(@"Insert into " + Schemaname + ".T_TYPE_TYPE (TYPE_TYPE_ID,NAME,DESCRIPTION) values (2,'TypeType1','Name 2')"); 
     // etc. 
    } 
}