繁体   English   中英

EF Code First 迁移 - 属性迁移

[英]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初始值设定

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

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

姓名:用户 1

地址:Emmalaan 2, Gelderland

电话号码:0471250950

性别:男

现在我想将我的 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; }
      }
    }

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

姓名:用户 1

街道名称:Emmalaan 2

门牌号:2

城市:海尔德兰

电话号码:0471250950

性别:男

这可以通过迁移实现吗? 这是如何完成的?

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

迁移的内部Up()方法:

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

Down()方法中是Up()的反函数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM