c# - 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() 进行迁移)?
解决方案
类别 A 和类别 B 的更改应通过在更改HasData()
参数后添加新迁移来处理。
但是,将子实体从 C 类移动到 B 类需要在添加迁移后手动编辑迁移。
推荐阅读
- javascript - ajax 响应显示在控制台中,但未显示在警报框中
- android - 如何在 Retrofit with Android 中使用特定查询?
- javascript - CSS 样式在刷新后显示,然后在 Knockout 中不可见
- angular - 未捕获的类型错误:无法在 HttpXhrBackend 读取未定义的属性“方法”
- node.js - 使用nodejs将http重定向到https时出现ERR_CONNECTION_REFUSED
- azure - 将 .azurewebsites.net 重定向到 MVC.Core 的域
- node.js - 允许用户链接他们的谷歌驱动器来存储数据
- php - 在 Codeigniter 中上传的最大文件大小
- javascript - 用于在 JavaScript 中显示现有动态表中的行数据以及添加删除的 JSON 对象
- sql - Sql/Pl/sql 中的字符串模式匹配