我有一个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中进行数据迁移的正确方法吗?任何帮助,将不胜感激。非常感谢!