如何设置默认值与代码第一次迁移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());
...
}
}
答
您还可以在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.
}
}
非常感谢! – Karine 2013-04-20 14:52:02