EF核心种子迁移:重新种植

问题描述 投票:1回答:1

我很熟悉,并且一直在使用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())进行迁移?

c# sqlite entity-framework-core
1个回答
0
投票

A类和B类的更改应通过在HasData()参数中进行更改后添加新的迁移来处理。

但是,将子实体从C类移动到B类将需要在添加后手动编辑迁移。

© www.soinside.com 2019 - 2024. All rights reserved.