請教各位先進:
我沒實際使用過CodeFirst來開發,看了文章想請教一個問題,就是關於使用CodeFirst開發,當資料庫己經有成千上百筆資料後,若日後又有需要調整DB的需求時,例如:新增、刪減欄位,變更資料型態等等調整,那CodeFirst的機制會將舊有的資料完整保留並做合併轉移嗎?
因為看文章好像是寫到:
由於開發階段會時常會調整Data Model並透過EF來建立(刪除與重建)DB,若是每次都要手動寫入測試(預設)資料必定對於開發人員造成不少困擾,所以我們將透過以下方式讓EF在建立(刪除與重建)DB後自動執行自訂之行為。
ref:https://dotblogs.com.tw/wasichris/2014/08/23/146339
如果CodeFirst是透過刪除與重建的方式來重建DB,那資料庫上的舊資料是否能被完善的保留下來呢?
感謝各位先進指教~
如果有使用code first來進行新增,修改或者刪除欄位,
只需要下指令Add-Migration xxxxxxx就行了,
然後再進行Update-Database,並不會把資料庫整個刪了,
只會對你所修改的部分進行更新,並且產生對應的SQL指令。
估計你貼的那篇教學的那一部分,只是要表達,有特定情況下開發人員需要會刪除DB,
如果每次刪除資料內容需要重建會很麻煩,所以可以使用StoreInitializer辦法.
第一次回答問題,有錯誤請糾正和原諒
https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/
ksg 大大回復已經很好回答問題了
我這邊做一些小補充
那CodeFirst的機制會將舊有的資料完整保留並做合併轉移嗎?
不會保留舊有資料
只會保留歷史表格結構變動過程
如果CodeFirst是透過刪除與重建的方式來重建DB,那資料庫上的舊資料是否能被完善的保留下來呢?
sql使用的是alert語法,所以不會刪除表格再重新建立
請不要在正式環境使用CodeFirst Cli Update-Database做更新正式庫動作,會被阿嚕八到死...
請轉成SQL找半夜使用者低峰期時間給DBA執行
感謝先進指教,這邊再請教一下CodeFirst的觀念:
假定我們想要刪除A資料表的Column1欄位,那動作流程應該如何操作?
情境1在測試環境下
1.刪除CodeFirst.cs程式碼的Column1欄位
2.下指令Add-Migration xxxxxxx
3.進行Update-Database
情境2在正式環境
1.刪除CodeFirst.cs程式碼的Column1欄位
2.轉成SQL給DBA執行
問題:2.這個步驟要如何將CodeFirst變更的資訊轉成SQL呢?
還是先進指的意思是在正式環境下就不建議使用CodeFirst的方式更新資料庫了呢?
假定我們想要刪除A資料表的Column1欄位,那動作流程應該如何操作?
你的流程是對的
正式環境下就不建議使用CodeFirst的方式更新資料庫了呢?
對,不適合