EF Core如何清理和重置数据库 EF Core EnsureDeleted和EnsureCreated

来源:这里教程网 时间:2026-02-21 17:39:33 作者:

EF Core 提供了

EnsureDeleted
EnsureCreated
这两个便捷方法,适合开发和测试阶段快速清理或初始化数据库。它们不走迁移流程,而是直接操作数据库结构,简单直接但需谨慎使用。

EnsureDeleted:彻底删除整个数据库

调用

context.Database.EnsureDeleted()
会尝试删除当前连接字符串指向的**整个数据库**(包括所有表、索引、约束等)。如果数据库不存在,不报错;如果无删除权限,则抛出异常。

适用于本地开发、单元测试前重置环境 不会保留任何数据或结构,删库跑路级操作 不依赖迁移历史,也不检查模型是否变更 注意:生产环境绝对禁用

EnsureCreated:仅在库为空时建库建表

context.Database.EnsureCreated()
会检查数据库是否存在且是否为空(即不含任何用户表)。只有当数据库**完全不存在**或**存在但没有任何表**时,才会创建数据库并根据当前模型生成全部表结构。

一旦数据库里有任意一张表(哪怕不是你 DbContext 管理的),它就什么也不做 不支持增量更新:模型改了字段,它不会修改已有表,也不会报错 没有迁移记录,无法回滚,不适合版本演进场景 常用于原型验证、内存数据库(InMemory)或极简示例

这两个方法的典型组合用法

开发调试中常用“先删后建”来获得干净起点:

context.Database.EnsureDeleted();
context.Database.EnsureCreated();

但要注意:这会丢失所有数据,且不能保证表结构与最新模型完全一致(比如缺少外键、索引或自定义约束)。

比 EnsureCreated 更靠谱的初始化方式

若需要模型变更也能自动同步结构,应改用迁移(Migrations):

运行
Add-Migration Init
创建初始迁移
再执行
Update-Database
应用到数据库
后续模型变更只需新增迁移 + 更新,安全可控 还可导出 SQL 脚本:
Script-Migration

基本上就这些。EnsureDeleted/EnsureCreated 是快刀斩乱麻的工具,够用但不健壮;真要长期维护,迁移才是正解。

相关推荐