【问题标题】:EF Core Seed Migrations: reseedingEF Core 种子迁移:重新播种
【发布时间】:2018-09-07 21:04:47
【问题描述】:

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

【问题讨论】:

  • 嗯,A 类和 B 类的变化应该通过添加一个新的迁移来处理。将子实体从 C 类移动到 B 类可能需要在添加迁移后手动编辑迁移。
  • 嗨科林,是的,我已经解决了,你是对的。正如您在我发布答案之前所评论的那样,如果您将您的评论作为答案(但对于 C 类所需的手动编辑,“将”不是“可能”),那么我会接受它作为答案。

标签: c# sqlite entity-framework-core


【解决方案1】:

在更改 HasData() 参数后,只需添加新的迁移即可处理 A 类和 B 类的更改。

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

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多