5

Интересно, если есть возможность с Entity Framework-х Миграциями, чтобы получить сценарий SQL для создания контента моей базы данных, включая все данные из моего метода семян в классе Configuration:Получить скрипт для создания базы данных, включая данные инициализатора

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

Помощь команды Update-Database не выглядит, как это может быть сделано:

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

Вы уже нашли метод 'Seed', поэтому не могли бы вы указать, что еще не ясно? –

+0

Метод семян разбивает содержимое базы данных на новую/существующую базу данных. Я хочу, чтобы сгенерированный скрипт содержал это. – mosquito87

+0

?? Пожалуйста, покажите код (хотя и незрелый) того, что вы хотели бы сделать в методе семян. У вас есть контекст, поэтому вы можете делать любое действие CRUD, которое вам нравится. –

ответ

0

это не представляется возможным. (Чтобы иметь данные, сгенерированные в методе Seed, генерирующие SQL-запросы).

Альтернативным обходным путем является использование скрипта для сборки -> create database -> скрипта базы данных с данными? (Powershell, вероятно, может сделать это, нажав на SQL объектов управления сервером.)

0

Вот что я сделал, может быть не так красиво, но это работает для нас (обратите внимание, что это для нашего местного разработчика и сред 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. 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^