EF Code First Migration - 财产迁移

时间:2018-02-20 09:54:57

标签: c# .net entity-framework ef-code-first 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 初始值设定项

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

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

  

名称:User1

     

地址:Emmalaan 2,Gelderland

     

PhoneNumber:0471250950

     

性别:M

现在我想将我的User类更改为以下内容:

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; }
      }
    }

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

  

名称:User1

     街道名称:Emmalaan 2

     

HouseNumber:2

     

城市:海尔德兰

     

PhoneNumber:0471250950

     

性别:M

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

2 个答案:

答案 0 :(得分:1)

我认为你唯一能做的就是编辑生成的迁移来进行你想要的转换。

迁移内部的 Up()方法:

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

    向上()的反转。

答案 1 :(得分:0)

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