5

Mi chiedo se c'è una possibilità con le migrazioni di Entity Framework per ottenere lo script SQL per creare il contenuto del mio database inclusi tutti i dati dal mio metodo seme nella classe di configurazione:Get script per creare database inclusi i dati di inizializzazione

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

Aiuto del comando Update-Database non sembra che potrebbe essere fatto:

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

Hai già trovato il metodo 'Seed', quindi potresti specificare cosa non è ancora chiaro? –

+0

Il metodo seed semina il contenuto del database in un database nuovo/esistente. Mi piacerebbe che lo script generato contenga questo contenuto. – mosquito87

+0

?? Si prega di mostrare un codice (anche se immaturo) di ciò che si vorrebbe fare nel metodo seme. Hai un contesto in cui puoi fare qualsiasi azione CRUD che ti piace. –

risposta

0

Questo non è possibile. (Per avere dati generati nel metodo Seed che genera istruzioni SQL).

Una soluzione alternativa consiste nell'utilizzare uno script per creare -> creare un database -> eseguire lo script del database con i dati? (PowerShell probabilmente può farlo toccando in oggetti di gestione di SQL Server.)

0

Ecco quello che ho fatto, potrebbe non essere così bella, ma funziona per noi (notare che questo è per il nostro dev locale e ambienti 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. 
    } 
} 
Problemi correlati