【发布时间】: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