C# 4.0 如何使用代码优先迁移C#为数据库设置默认值

C# 4.0 如何使用代码优先迁移C#为数据库设置默认值,c#-4.0,asp.net-mvc-4,ef-code-first,entity-framework-migrations,C# 4.0,Asp.net Mvc 4,Ef Code First,Entity Framework Migrations,我的问题很简单。。。使用代码优先迁移和C#,在使用该工具从头开始生成新数据库时,是否可以使用默认值,如country、tag或state?如果是,请解释一下如何操作?是的,您可以在迁移中运行原始SQL来插入数据: public partial class InitialCreate : DbMigration { public override void Up() { this.Sql("INSERT ..."); } ... } 或者,您可以在

我的问题很简单。。。使用代码优先迁移和C#,在使用该工具从头开始生成新数据库时,是否可以使用默认值,如country、tag或state?如果是,请解释一下如何操作?

是的,您可以在迁移中运行原始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());
       ...
   }
}
公共密封类MyConfiguration:DbMigrationsConfiguration
{
公共MyConfiguration()
{
this.AutomaticMigrationsEnabled=false;
}
受保护的覆盖无效种子(MyContext上下文)
{
context.Users.AddOrUpdate(u=>u.Id,this.GetMyUsers());
...
}
}

您也可以在Seed方法中使用原始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.
    }
}
公共类配置:dbmigrionsconfiguration
{
公共配置()
{
AutomaticMiggerationsEnabled=假;
SetSqlGenerator(OracleConnectionInfo.InvariantName,新的OracleEntityMiggerationSqlGenerator());
}
受保护的覆盖无效种子(MyContext上下文)
{
Write(“In-Seed-method.User:+userName”);
MyInitializer.AddUpdateDataSql(上下文);
}
}
公共类MyInitializer:MigrateDatabaseToLatestVersion
{
私有常量字符串Schemaname=“MYSCHEMA”;
公共静态void AddUpdateDataSql(ProNov2Context上下文)
{
DeleteTableData(上下文);
DropCreateSequences(上下文);
PopulateTypeData(上下文);
//等等。
}
私有静态void DeleteTableData(DbContext上下文)
{
context.Database.ExecuteSqlCommand(@“delete”+Schemaname+“.T_TABLE1”);}
context.Database.ExecuteSqlCommand(@“delete”+Schemaname+“.T_TABLE2”);}
//等等。
}
私有静态void DropCreateSequences(DbContext上下文)
{
context.Database.ExecuteSqlCommand(@“DROP SEQUENCE”+Schemaname+“.T_TABLE1_SEQ”);}
context.Database.ExecuteSqlCommand(@“DROP SEQUENCE”+Schemaname+“.T_TABLE2_SEQ”);}
//等等。
}
私有静态void PopulateTypeData(DbContext上下文)
{
尝试{context.Database.ExecuteSqlCommand(@“插入”+Schemaname+”.T_TYPE_TYPE(TYPE_TYPE_ID,NAME,DESCRIPTION)值(1,'TypeType1','NAME 1');
尝试{context.Database.ExecuteSqlCommand(@“插入”+Schemaname+”.T_TYPE_TYPE(TYPE_TYPE_ID,NAME,DESCRIPTION)值(2,'TypeType1','NAME 2');
//等等。
}
}