EF 代码首次迁移 - 属性 迁移

EF Code First Migration - Property migration

想象一下这种情况:

namespace SC.BL.Domain
{
  public class User
  {
    public String Name { get; set; }
    public String Adress { get; set; }
    public int PhoneNumber { get; set; }
    public char Gender { get; set; }
  }
}

EF 代码首次迁移已启用。我使用 'enable-migrations'

实现了基于代码的迁移

我的 DbInitializer 设置为使用 MigrateDatabaseToLatestVersion 初始化器

现在我的问题是,我想将一个 属性 迁移到多个属性中,而不会丢失数据,之后旧的 属性 可能会被删除!

假设我的数据库中有以下内容,

Name: User1

Address: Emmalaan 2, Gelderland

PhoneNumber: 0471250950

Gender: M

现在我想将我的用户 class 更改为以下内容:

namespace SC.BL.Domain
    {
      public class User
      {
        public String Name { get; set; }
        public String StreetName { get; set; }
        public int HouseNumber { get; set; }
        public String City { get; set; }
        public int PhoneNumber { get; set; }
        public char Gender { get; set; }
      }
    }

所以现在我希望在迁移之后更改数据库中的数据(没有数据丢失)并放入正确的属性中。 我在哪里可以让迁移者做这样的事情?

Name: User1

StreetName: Emmalaan 2

HouseNumber: 2

City: Gelderland

PhoneNumber: 0471250950

Gender: M

这可以通过迁移实现吗?这是怎么做到的?

我认为这不可能通过迁移实现。您想要更改 table 的结构,并且您希望迁移自动将不同列中的数据分开。我认为这是不可能的。我认为更好的方法是仅通过迁移添加列,然后您可以创建 SQL 程序来将数据拆分和更新到不同的列。

我认为您唯一可以做的就是编辑生成的迁移以进行您想要的转换。

内部 Up() 迁移方法:

  1. 使用Sql()方法将数据写入临时table
  2. 将 table 迁移到新结构(使用生成的代码)
  3. 使用 Sql() 方法从临时 table 中获取所有数据(根据需要拆分),以便您可以填充已编辑的数据table

Down() 方法中 Up().