EF Core Code First迁移用于安全更新已存在数据库的结构而不丢失数据,核心流程是add-migration生成迁移文件、update-database应用变更;需在模型变更后使用,不可依赖EnsureCreated()重建。

EF Core 的 Code First 迁移,核心是“用 C# 类定义模型 → 生成数据库结构 → 后续模型变更时通过迁移脚本安全更新”,不重装库、不丢数据。
什么时候必须用迁移
当你已经生成过数据库,又改了实体类(比如加字段、删属性、改类型、加外键),直接运行会报错:
“The model backing the context has changed since the database was created…”
这说明 EF Core 检测到代码模型和数据库表结构不一致,此时不能靠 EnsureCreated() 或删库重建——得走迁移流程。
标准三步操作(命令行)
确保已安装 Microsoft.EntityFrameworkCore.Tools 包,并在 PMC(包管理器控制台)中执行:
-
add-migration Init —— 生成迁移文件(如
20251208180000_Init.cs),含Up()(建表/改结构)和Down()(回滚)方法 - update-database —— 执行最新迁移,把变更应用到数据库(开发环境可直接运行)
- 若指定项目或上下文,加参数:
add-migration Init -project H.Modules.Operation -c MyDbContext
常见补充操作
迁移不是一锤子买卖,日常开发中还会用到:
- script-migration —— 生成 SQL 脚本,适合给 DBA 审核或部署到生产环境
- script-migration -idempotent —— 生成幂等脚本,不管目标库是否已有迁移历史都能安全执行
-
remove-migration —— 删除最后一次生成但未应用的迁移文件(慎用,已
update-database的不能删) - update-database -migration:Init —— 回退到某次迁移(比如从 v3 退到 v1)
种子数据怎么加
迁移过程中同步插入初始数据,写在 OnModelCreating 里:
modelBuilder.Entity
注意:主键值必须明确指定,且该数据只在对应迁移首次应用时插入(后续迁移不会重复插入)。
基本上就这些。迁移本质是把模型变化转成可追溯、可复现、可协作的代码快照,不是黑盒操作,理解 Up/Down 逻辑就能稳住数据库演进。










