我很熟悉,并且一直在使用EF Core 2.1迁移和播种。但是,我不清楚如何将种子迁移到新的(更改的)版本。
所以在应用程序的第1版我有:
modelBuilder.Entity<Category>().HasData(
new Category[]
{
new Category() { Id = 1, Name = "Category A" },
new Category() { Id = 2, Name = "Category B" },
new Category() { Id = 3, Name = "Category C" }
});
用户一直在这些类别下添加项目,即
public class Category {
public List<UserItem> Items {get; set;}
}
和FYI:Xamarin表单 - 因此数据库是每个用户设备上的Sqlite数据库。
现在我发布版本2,类别已更改,但我不想丢失任何现有的用户数据。
类别种子数据现在看起来像:
modelBuilder.Entity<Category>().HasData(
new Category[]
{
new Category() { Id = 1, Name = "Category A" },
new Category() { Id = 2, Name = "Category B has a new name" },
// Category C has been merged with Category B
});
A类没有变化,B有一个新名称,C已被删除,C项目现在需要在B类下。
如何在EF Core迁移中实现在新类别下保留现有的UserItem数据(注意每个用户都有自己的db我只能使用EF运行时context.Migrate())进行迁移?
A类和B类的更改应通过在HasData()
参数中进行更改后添加新的迁移来处理。
但是,将子实体从C类移动到B类将需要在添加后手动编辑迁移。