在数据库迁移过程中迁移数据

时间:2019-01-14 12:55:01

标签: .net-core entity-framework-core entity-framework-core-migrations

我有一个EFCore项目,该项目具有一个包含一些数据的现有表。我想创建一个新表,从现有表中传输一些数据,然后从现有表中删除一些列。一个简单的例子是:

具有地址和城市字段的用户类别:

public class User
{
   long ID {get;set;}
   string UserName {get; set;}
   string Password {get; set;}
   string StreetAddress {get; set;}
   string City {get; set;}
}

让我们稍后再说,我想允许一个用户拥有多个地址,所以我创建了一个地址对象

public class Address
{
   long ID {get; set;}
   long UserId{get; set;}
   string StreetAddress {get; set;}
   string City {get; set;}   
}

我想生成一个迁移以从用户那里获取StreetAddress和City,然后创建一个与该用户相关联的新Address记录。然后,我想从“用户”中删除“街道地址”和“城市”字段。

我的想法是,理想情况下,我将能够通过我的项目DatabaseContext使用MigrationBuilder方法和查询的组合在迁移中执行此操作。类似

public partial class AddressMigration: Migration
{
  protected override void Up(MigrationBuilder migrationBuilder)
  {
    migrationBuilder.CreateTable(
      name "Address",
      columns: table => new
      {
         //table columns
      },
      constraints: table =>
      {
       //constraints   
    });
    List<User> users = myContext.Users.ToList();
    foreach(var user in users)
    {
      var address = new Address() 
      {
        UserId = user.id, 
        StreetAddress = user.StreetAddress, 
        City = user.City
      };
      myContext.Addresses.Add(address);
    }
    myContext.SaveChanges();

    migrationBuilder.DropColumn("StreetAddress", table:"User")
  }
}

但是,当我开始四处挖掘时,没有看到在迁移过程中访问数据库上下文的方法。我在文档中看到我可以实现一个custom migration operation,我可以将参数传递给它,但这仍然需要我首先能够获取数据。.我不确定该怎么做。同样,它需要原始sql进行漂亮的标准操作,这让我对ORM要求很奇怪。

有人可以建议在ef core中进行数据迁移的正确方法吗?任何帮助,将不胜感激。非常感谢!

0 个答案:

没有答案