首页 > 解决方案 > EF Core 种子迁移:重新播种

问题描述

我熟悉并一直在使用 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;}
}

仅供参考:Xamarin Forms - 所以数据库是每个用户设备上的 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 迁移中实现的,以将现有的 UserItems 数据保留在新类别下(请注意,由于每个用户都有自己的数据库,我只能使用 EF 运行时 context.Migrate() 进行迁移)?

标签: c#sqliteentity-framework-core

解决方案


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

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


推荐阅读