我已經在 Azure SQL 資料庫上部署了一個 SQL 資料庫,并在 .NET 5.0 中發布了一個 API,但是 EF Core/Database 是我缺乏一點知識的領域。
我的設定是,當我創建新遷移時,為了更新資料庫,我在 Visual Studio 中發布應用程式,它會自動更新資料庫。
我的問題是:運行新遷移可以洗掉資料嗎?
現在我在資料庫中有很多資料,我不得不手動輸入,我不想再次輸入所有內容,因為我沒有問“愚蠢的問題”。
換句話說,你能告訴我如何確保在運行新遷移時不會洗掉生產資料庫中當前的資料,尤其是在修改表和添加新表時,以及確保它不會破壞任何會使我的生產 API/資料庫崩潰的東西。
我不知道如何更新資料庫而不會混淆哪些記錄將被洗掉,因為本地資料庫和生產資料庫當然沒有相同的資料,以及它將如何與以前記錄的種子資料混淆仍在 DbContext 中。
如您所見,我對它在生產中的作業方式感到非常困惑,因為這是我第一次必須管理實時系統。
uj5u.com熱心網友回復:
當然是。EF 核心在代碼優先方法中存在缺陷,例如每當您更改任何內容到 respestive 表時,它也會影響資料。
假設作為一個例子。
我有桌子 Test
TestId
TestName
TestAdd
Testxyz
我在下表中有資料:
TestId TestName TestAdd Testxyz
1 a b c
2 b c d
3 d e f
4 e f g
對于上表,如果我從物體表中洗掉列,那么肯定也會洗掉資料,但 EF 核心會在包管理器控制臺中向您發出警告,例如There might be some changes in file will affected to database kindly review the migration file.
uj5u.com熱心網友回復:
在某些極端情況下,可能需要洗掉所有遷移并重新開始。這可以通過洗掉 Migrations 檔案夾并洗掉資料庫來輕松完成;此時您可以創建一個新的初始遷移,其中將包含您當前的整個架構。
還可以重置所有遷移并創建一個遷移而不會丟失資料。這有時被稱為“擠壓”,并且涉及一些手動作業:
- 洗掉您的 遷移 檔案夾
- 創建一個新的遷移并為其生成一個 SQL 腳本
- 在您的資料庫中,從遷移歷史記錄表中洗掉所有行
- 在遷移歷史記錄中插入一行,以記錄已經應用了第一個遷移,因為您的表已經存在。插入 SQL 是上面生成的 SQL 腳本中的最后一個操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416840.html
標籤:
