如何使用Entity Framework Core数据迁移向现有种子数据追加新数据
EF Core HasData 新增种子数据不生效的解决方法
核心原因
EF Core的种子数据变更不会自动同步到数据库,你修改HasData配置后必须走完整的迁移流程才能生效。
具体操作步骤
- 生成对应变更的迁移文件
改完HasData配置后,在对应项目目录下执行迁移生成命令:- 包管理器控制台(PMC):
Add-Migration Add[你的实体名]ExtraSeedData- dotnet CLI:
生成后打开新生成的迁移文件,检查dotnet ef migrations add Add[你的实体名]ExtraSeedDataUp方法中是否存在你新增的40条数据对应的InsertData调用,确认迁移内容正确。 - 执行迁移同步到数据库
执行迁移应用命令把变更推到数据库:- 包管理器控制台(PMC):
Update-Database- dotnet CLI:
执行完成后查询数据库即可看到新增的种子数据。dotnet ef database update
异常场景排查
如果执行完上述操作仍然无效,可按以下顺序排查:
- 确认你修改的
HasData对应的实体配置类,已经在DbContext.OnModelCreating中被正确注册,没有被其他配置覆盖 - 检查你新增的种子数据主键没有和数据库中已存在的非种子数据主键冲突,虽然你反馈无报错,但是如果是静默忽略主键冲突的场景也会出现插入失败的情况
- 如果你是程序启动时自动调用
Migrate()/MigrateAsync()执行迁移,确认新生成的迁移文件已经被编译到运行的程序集中,发布时不要遗漏迁移文件
另外注意你示例中把Id=2的name字段值从Sam改成了小写的sam,如果实际场景你也修改了原有种子数据的非主键字段,迁移生成时会自动生成UpdateData调用同步这个修改。
内容的提问来源于stack exchange,提问作者misuk
相关产品推荐
相关产品推荐

