EF Core 数据库迁移
1.执行 EF Core 数据库迁移
迁移是 EF Core 将实体类结构同步到数据库表的核心机制,需通过 NuGet 包管理器控制台(PMC) 执行:
- 打开 PMC:Visual Studio 顶部菜单 → 工具 → NuGet 包管理器 → 包管理器控制台。
 - 执行添加迁移命令(首次迁移命名为 InitialCreate):
 
powershell
Add-Migration InitialCreate
- 执行更新数据库命令:
 
powershell
Update-Database
Add-Migration InitialCreate 和
Update-Database 是 EF Core 中数据库迁移的核心命令,作用是将你的 C# 实体类结构同步到数据库表,实现 “代码定义模型 → 数据库自动建表” 的全流程。
1. Add-Migration InitialCreate:生成 “迁移文件”
- 作用:根据当前实体类(如 Clazz、Student、EmpExpr 等)和 AppDbContext 的配置,生成一份 “数据库结构变更脚本”(即迁移文件)。
 - 细节:
- InitialCreate 是迁移的 “名称”(可自定义,通常首次迁移用这个名字,表示 “初始创建”)。
 - 生成的文件会保存在项目的 Migrations 文件夹下,包含两部分内容:
- Up() 方法:描述 “如何从空数据库创建出实体对应的表、字段、外键关系”(比如 CREATE TABLE 语句)。
 - Down() 方法:描述 “如何回滚本次迁移”(比如 DROP TABLE 语句,用于迁移出错时恢复)。
 
 
 
2. Update-Database:执行迁移,同步到数据库
- 作用:将 Add-Migration 生成的迁移文件,实际执行到数据库中,让数据库表结构与实体类完全一致。
 - 细节:
- 执行时,EF Core 会连接 appsettings.json 中配置的数据库(如你设置的 teach 数据库)。
 - 自动执行迁移文件的 Up() 方法,创建表、字段、外键等(比如为 Clazz 建表,为 Student 建表并添加关联 ClazzId 的外键)。
 - 数据库中会自动生成一张 __EFMigrationsHistory 表,记录已执行的迁移,避免重复执行。
 
 
总结:两步实现 “代码 → 数据库” 同步
- Add-Migration:“设计图纸”—— 根据实体类生成建表的 “施工方案”(迁移文件)。
 - Update-Database:“按图施工”—— 根据 “施工方案” 在数据库中实际创建表结构。最终效果:你的 C# 实体类(如
 
Student)会对应数据库中的
Students 表,字段、类型、外键关系完全匹配,后续就能通过 EF Core 直接操作数据库了。
2.迁移回退
一、部分回退:回到指定迁移版本
如果只想回退到某一个历史迁移(保留部分历史结构):
- 打开包管理控制台(PMC)(Visual Studio → 工具 → NuGet 包管理器 → 包管理控制台)。
 - 执行命令:
 
powershell
Update-Database 目标迁移名称
例如:Update-Database InitialCreate(假设要回退到名为 InitialCreate 的迁移)。
- EF Core 会自动执行迁移的 Down 方法,将数据库结构回滚到该迁移对应的状态。
 
二、完全重置:清空所有迁移,重新映射
如果要彻底清除所有迁移痕迹,重新生成表结构:
步骤 1:回退到 “初始无迁移” 状态
在 PMC 中执行:
powershell
Update-Database $InitialDatabase
- 这会将数据库回滚到没有应用任何迁移的初始状态(__EFMigrationsHistory 表会记录此状态)。
 
步骤 2:删除旧迁移文件进入项目的
Migrations 文件夹,删除所有自动生成的迁移文件(以 “时间戳_迁移名称.cs” 命名的文件)。
- 保留 DbContext 相关的类(如 YourDbContext.cs),仅删除迁移历史文件。
 
步骤 3:清空迁移历史表(可选)若想彻底清理数据库中记录迁移的
__EFMigrationsHistory 表,可在数据库中执行 SQL:
sql
DELETE FROM __EFMigrationsHistory;
- (此步骤可选,Update-Database $InitialDatabase 通常已将该表重置为初始状态)
 
步骤 4:重新创建迁移
在 PMC 中执行:
powershell
Add-Migration 新迁移名称 # 例如:Add-Migration NewInitialSetup
- EF Core 会扫描当前实体模型(DbContext + 实体类),生成全新的迁移文件。
 
步骤 5:应用新迁移到数据库
在 PMC 中执行:
powershell
Update-Database
- EF Core 会根据新的迁移文件,重新创建数据库表、外键等结构。
 
注意事项
- 数据安全:回退或重置会修改数据库结构,若有重要数据,需先备份数据库。
 - 迁移方法完整性:确保迁移的 Up/Down 方法逻辑正确(如数据迁移、外键删除顺序等),否则回退时可能报错。
 - SQLite 等特殊数据库:若使用 SQLite,因不支持部分迁移操作,建议直接删除数据库文件后重新执行 Update-Database。
 
