c# - 在 EF Core 5 中检测模型和数据库是否不同步
问题描述
我正在使用“创建和删除” API,因为我的模型经常更改。
模型更改后,我调用dotnet ef database drop
,然后在下一次运行系统调用context.Database.EnsureCreated()
以重新创建数据库。我可以在此之前,context.Database.EnsureDeleted()
但我不想每次都删除/重新创建数据库(它会减慢开发“内循环”,并且会影响我的驱动器)。
曾经有一种简单的方法(在旧 EF 中)以编程方式检测数据库和模型是否不同步。EF Core 中没有这样的内置功能。有一些方法(例如,例如),但它们已有几年历史,不可靠(取决于内部功能)并且适用于旧版本。
在v5中是否有一种稳定的方法(不使用内部装配功能)来执行此操作?
解决方案
您可以使用 EF Core 将您的架构 ( context.Model
) 序列化为字符串.Model.DebugView.LongView
。
然后我会从该字符串计算一个哈希值,并将该哈希值与存储在表中的值进行比较。
由于 EF Core 不公开运行原始选择查询的方法,尤其是在您不能依赖最新的架构时。您要么需要SqlConnection
直接使用来查询表。
或者将您的比较构建为insert
/update
语句,以便您可以根据受影响的行数决定要做什么。由于您要立即销毁数据库,因此可以忽略该 sql 的副作用。
推荐阅读
- laravel - 在 Laravel 包中注册 vue 组件
- c++ - 尝试动态释放和重新创建数组时触发断点
- python - 如何在 python 中使用 Box Pierce Test
- bash - Shell 脚本 - 在 curl、nc 或 telnet 中强制使用 HTTP 1.1 流水线
- javascript - 无限重复for循环
- python - 有没有办法从没有空格的字符串中的列表中找到一个单词?
- list - 如何区分 DART 中的复杂对象列表
- hibernate - org.hibernate.query.sqm.ParsingException:无法解释点标识符:brandId
- css - 定位以前的兄弟姐妹 CSS
- ubuntu - 为什么我在使用“source”运行 TCL 脚本时会出错?