在 EF Core 5 中检测模型和数据库是否不同步

Detect whether model and database out of sync in EF Core 5

我正在使用“创建和删除”APIs,因为我的模型经常变化。

模型更改后,我调用 dotnet ef database drop,接下来 运行 系统调用 context.Database.EnsureCreated() 重新创建数据库。我可以在 context.Database.EnsureDeleted() 之前使用 drop/recreate 数据库 一次(它减慢了开发“内部循环”,并且它'我会敲打我的驱动器)。

曾经有一种简单的方法(在旧 EF 中)以编程方式检测数据库和模型是否不同步。 EF Core 中没有这样的内置功能。有一些方法 (, ) 但它们已经有几年历史了,不可靠(取决于内部功能)并且适用于旧版本。

v5 中是否有稳定的方法 - 不使用内部汇编功能 - 做到这一点?

您可以使用 .Model.DebugView.LongView.

让 EF Core 将您的架构 (context.Model) 序列化为字符串

然后我会根据该字符串计算哈希值,并将该哈希值与存储在 table.

中的值进行比较

因为 EF Core 不会向 运行 公开原始 select 查询的方法,特别是如果您不能依赖最新的架构。您可能需要直接使用 SqlConnection 来查询 table.

或者将您的比较构造为 insert / update 语句,以便您可以根据受影响的行数决定要做什么。由于您要立即销毁数据库,因此可以忽略 sql 的副作用。