如何设置默认值与代码第一次迁移C#数据库

如何设置默认值与代码第一次迁移C#数据库

问题描述:

我的问题是非常简单的...是否有可能,与代码第一次迁移和C#,从国家或标签或状态时,从默认值生成一个新的数据库从默认值用工具?如果是的话,你能解释一下吗?如何设置默认值与代码第一次迁移C#数据库

是的,你既可以运行原始的SQL在迁移中插入数据:

public partial class InitialCreate : DbMigration 
{ 
    public override void Up() 
    { 
     this.Sql("INSERT ..."); 
    } 
    ... 
} 

另外,上次迁移运行后,你可以访问你的背景,你可以在那里插入您的数据:

public sealed class MyConfiguration : DbMigrationsConfiguration<MyContext> 
{ 
    public MyConfiguration() 
    { 
     this.AutomaticMigrationsEnabled = false; 
    } 

    protected override void Seed(MyContext context) 
    { 
     context.Users.AddOrUpdate(u => u.Id, this.GetMyUsers()); 
     ... 
    } 
} 
+0

非常感谢! – Karine 2013-04-20 14:52:02

您还可以在Seed方法中使用raw sql来执行此操作。 AddOrUpdate没有为我的方案工作,所以我最终这样做:

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