簡體   English   中英

在 EF Core 5 中檢測模型和數據庫是否不同步

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

我正在使用“創建和刪除” API,因為我的模型經常更改。

模型更改后,我調用dotnet ef database drop ,並在下次運行時系統調用context.Database.EnsureCreated()來重新創建數據庫。 我可以先使用context.Database.EnsureDeleted()但我不想每次都刪除/重新創建數據庫(它會減慢開發“內部循環”的速度,並且會影響我的驅動器)。

曾經有一種簡單的方法(在舊的 EF 中)以編程方式檢測數據庫和模型是否不同步 EF Core 中沒有這樣的內置功能。 有一些方法(例如eg ),但它們已經有幾年的歷史了,不可靠(取決於內部功能)並且適用於較舊的版本。

有沒有一種穩定的方法——不使用內部裝配特征——在v5 中做到這一點?

您可以讓 EF Core 使用.Model.DebugView.LongView將您的架構( context.Model )序列化為字符串。

然后我會從該字符串計算一個哈希值,並將該哈希值與存儲在表中的值進行比較。

由於 EF Core 不公開運行原始選擇查詢的方法,特別是當您不能依賴最新的架構時。 您需要直接使用SqlConnection來查詢表。

或者將您的比較構建為insert / update語句,以便您可以根據受影響的行數決定要執行的操作。 由於您將立即銷毀數據庫,因此可以忽略該 sql 的副作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM