5

Ich frage mich, ob es eine Möglichkeit gibt ist mit Migrations Entity Framework das SQL-Skript zu erhalten, den Inhalt meiner Datenbank einschließlich aller Daten von meiner Samen Methode in der Configuration-Klasse zu erstellen:Erhalten Skript Datenbank einschließlich initializer Daten erstellen

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

Hilfe des Befehls-Update-Datenbank sieht nicht aus wie es getan werden könnte:

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

Sie haben bereits die 'Seed'-Methode gefunden, also könnten Sie bitte angeben, was noch nicht klar ist? –

+0

Die Seed-Methode sät den Datenbankinhalt in eine neue/vorhandene Datenbank. Ich möchte das generierte Skript enthalten enthalten. – mosquito87

+0

?? Bitte zeigen Sie Code (wie auch immer noch unreif) an, was Sie in der Seed-Methode tun möchten. Sie haben dort einen Kontext, so dass Sie jede beliebige CRUD-Aktion ausführen können. –

Antwort

0

das nicht möglich ist. (Damit Daten in der Seed-Methode generiert werden, die SQL-Anweisungen generiert).

Eine alternative Problemumgehung besteht darin, ein Skript zu verwenden, um -> create database -> script die Datenbank mit Daten zu erstellen? (Powershell wahrscheinlich kann es in SQL-Server-Management-Objekte tippen tun.)

0

Hier ist, was ich getan habe, nicht so schön sein könnte, aber es funktioniert für uns (beachten Sie, das für unsere lokalen Entwickler und CI-Umgebungen):

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. 
    } 
} 
Verwandte Themen