Entity Framework Core怎么用 Code First EF Core Code First迁移方法

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().HasData(new SysDict { Id = 1, Value = "test1" });

注意:主键值必须明确指定,且该数据只在对应迁移首次应用时插入(后续迁移不会重复插入)。

基本上就这些。迁移本质是把模型变化转成可追溯、可复现、可协作的代码快照,不是黑盒操作,理解 Up/Down 逻辑就能稳住数据库演进。