在实体框架中将bool更改为枚举 - 首先编码

时间:2016-09-12 07:41:11

标签: c# entity-framework

我有代码优先生成的数据库。在其中我在表格中有一个bool列。此列需要更改为枚举。问题是表已经有数据,必须以某种方式转换。 是)我有的 bool IsA:是/否 我需要的 枚举MyEnum: A B C D 我需要转换IsA的值,以便真正映射到A和false映射到B. 我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

您可以尝试在迁移类中执行此操作:

public partial class fromBool2Enum : DbMigration
{
    public override void Up()
    {
        //add new column:
        AddColumn("dbo.MyTable", "IsA_TEMP", c => c.Int());
        //transfer data to just created column
        Sql("Update dbo.MyTable set IsA_TEMP = case when IsA then 0 else 1 end");
        //0(i.e. A) and 1(i.e. B) is just example, correct it on your own, depending on enum's declaration

        //Drop old column
        DropColumn("dbo.MyTable", "IsA")
        //Rename new column to initial name
        Sql("EXEC sp_rename 'dbo.MyTable.IsA_TEMP', 'IsA', 'COLUMN'");            
    }

    public override void Down()
    {
         //corresponding reverse code...
    }       
}