5

Tôi tự hỏi nếu có một khả năng với Migrations Entity Framework để có được kịch bản sql để tạo ra nội dung của cơ sở dữ liệu của tôi bao gồm tất cả các dữ liệu từ phương pháp dòng dõi tôi trong lớp Cấu hình:Nhận kịch bản để tạo cơ sở dữ liệu bao gồm dữ liệu initializer

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

Trợ giúp của lệnh Update-Cơ sở dữ liệu không giống như nó có thể được thực hiện:

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

Bạn đã tìm thấy phương pháp 'Seed', vì vậy bạn có thể nêu rõ những gì chưa rõ ràng không? –

+0

Nội dung cơ sở dữ liệu hạt giống phương pháp hạt giống với cơ sở dữ liệu mới/hiện có. Tôi muốn tập lệnh được tạo chứa nội dung này. – mosquito87

+0

?? Vui lòng hiển thị một số mã (tuy nhiên chưa trưởng thành) về những gì bạn muốn làm trong phương thức hạt giống. Bạn có một bối cảnh ở đó để bạn có thể thực hiện bất kỳ hành động CRUD nào bạn thích. –

Trả lời

0

đó không phải là tốt. (Để có dữ liệu được tạo trong phương thức tạo các câu lệnh SQL).

Cách giải quyết khác là sử dụng tập lệnh để tạo -> tạo cơ sở dữ liệu -> tập lệnh cơ sở dữ liệu với dữ liệu? (Powershell có lẽ có thể làm điều đó khai thác thành các đối tượng quản lý máy chủ sql.)

0

Dưới đây là những gì tôi đã làm, có thể không được như vậy đẹp, nhưng nó làm việc cho chúng tôi (lưu ý này là dành cho dev của chúng tôi tại địa phương và môi trường 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. 
    } 
}