Entity framework 如何创建新列并首先使用实体框架代码将数据移动到其中

Entity framework 如何创建新列并首先使用实体框架代码将数据移动到其中,entity-framework,Entity Framework,Person是一个包含数据的数据库表。由于新的要求,我想删除IsActive并有一个状态枚举。我还希望在不丢失数据的情况下将数据从IsActive列移动到Status列。我先用EF代码。我该怎么办呢?我终于解决了这个问题。我遵循的步骤如下: 通过包管理器控制台构建添加迁移AlterStatusEnum 在生成的分部类的Up方法中,更改 AddColumn(“dbo.Person”,“Status”,c=>c.Int(可空:false)) 到 重命名栏目(“副总裁”、“活跃”、“状态”) 添加al

Person是一个包含数据的数据库表。由于新的要求,我想删除IsActive并有一个状态枚举。我还希望在不丢失数据的情况下将数据从IsActive列移动到Status列。我先用EF代码。我该怎么办呢?

我终于解决了这个问题。我遵循的步骤如下:

  • 通过包管理器控制台构建添加迁移AlterStatusEnum
  • 在生成的分部类的Up方法中,更改 AddColumn(“dbo.Person”,“Status”,c=>c.Int(可空:false))重命名栏目(“副总裁”、“活跃”、“状态”)
  • 添加alter语句 AlterColumn(“dbo.Person”、“Status”,c=>c.Int(可空:false)) 这就完成了任务
  • 示例代码

    class Person
    {
        public int Id { get; set; }
        //omitted for brevity
        public bool IsActive { get; set; }
    }
    class Person
    {
        public int Id { get; set; }
        //omitted for brevity
        public int Status { get; set; }
    }
    
    enum Status
    {
        Active,
        Inactive,
        NoState,
    }
    

    简而言之,我所做的一切就是重命名现有列并更改其数据类型。

    是否使用迁移?如果是这样的话,只需要添加新列,运行一些sql,然后删除旧列
    public partial class AlterStatusEnum : DbMigration
    {
        public override void Up()
        {
            RenameColumn("dbo.Person", "IsActive", "Status");
            AlterColumn("dbo.Person", "Status", c => c.Int(nullable: false));
        }
    
        public override void Down()
        {
            // Removed for brevity
        }
    }