首页 > 解决方案 > 在 EF Core 5 中检测模型和数据库是否不同步

问题描述

我正在使用“创建和删除” API,因为我的模型经常更改。

模型更改后,我调用dotnet ef database drop,然后在下一次运行系统调用context.Database.EnsureCreated()以重新创建数据库。我可以在此之前,context.Database.EnsureDeleted()但我不想每次都删除/重新创建数据库(它会减慢开发“内循环”,并且会影响我的驱动器)。

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

在v5中是否有一种稳定的方法(不使用内部装配功能)来执行此操作?

标签: c#entity-frameworkentity-framework-coreef-core-5.0

解决方案


您可以使用 EF Core 将您的架构 ( context.Model) 序列化为字符串.Model.DebugView.LongView

然后我会从该字符串计算一个哈希值,并将该哈希值与存储在表中的值进行比较。

由于 EF Core 不公开运行原始选择查询的方法,尤其是在您不能依赖最新的架构时。您要么需要SqlConnection直接使用来查询表。

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


推荐阅读