代码之家  ›  专栏  ›  技术社区  ›  Thomas Verhoeven

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

  •  -1
  • Thomas Verhoeven  · 技术社区  · 6 年前

    想象一下这种情况:

    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代码首次迁移已启用。我使用“启用迁移”实现了基于代码的迁移

    我的 数据库初始值设定项 设置为使用 MigrateDatabaseToLatestVersion 初始值设定项

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

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

    名称:User1

    地址:Gelderland Emmalaan 2

    电话号码:0471250950

    性别:M

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

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

    因此,现在我希望在迁移之后,数据库中的数据会发生更改(不会丢失数据),并放入正确的属性中。 我在哪里可以等到迁移者来做这样的事情?

    名称:User1

    街道名称:Emmalaan 2

    门牌号:2

    城市:Gelderland

    电话号码:0471250950

    性别:M

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

    2 回复  |  直到 4 年前
        1
  •  1
  •   Embri    6 年前

    我认为您唯一能做的就是编辑生成的迁移,以完成您想要的转换。

    在…内 Up() 迁移方法:

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

    向下() 方法的逆 Up() .

        2
  •  0
  •   nemostyle    6 年前

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