iT邦幫忙

0

ASP.NET MVC CodeFirst問題

請教各位先進:
  我沒實際使用過CodeFirst來開發,看了文章想請教一個問題,就是關於使用CodeFirst開發,當資料庫己經有成千上百筆資料後,若日後又有需要調整DB的需求時,例如:新增、刪減欄位,變更資料型態等等調整,那CodeFirst的機制會將舊有的資料完整保留並做合併轉移嗎?
因為看文章好像是寫到:

由於開發階段會時常會調整Data Model並透過EF來建立(刪除與重建)DB,若是每次都要手動寫入測試(預設)資料必定對於開發人員造成不少困擾,所以我們將透過以下方式讓EF在建立(刪除與重建)DB後自動執行自訂之行為。
ref:https://dotblogs.com.tw/wasichris/2014/08/23/146339

如果CodeFirst是透過刪除與重建的方式來重建DB,那資料庫上的舊資料是否能被完善的保留下來呢?
感謝各位先進指教~

fysh711426 iT邦研究生 4 級 ‧ 2019-05-15 12:59:17 檢舉
正式上線後就不會用指令直接更新 (會怕)
會將異動做成語法,更新程式的時候一起更新
Homura iT邦高手 2 級 ‧ 2019-05-15 13:55:30 檢舉
感覺CodeFirst實務上不太好用耶!
目前還沒做過使用這個的專案@@

2 個回答

3
ksg
iT邦新手 5 級 ‧ 2019-05-15 12:32:35

如果有使用code first來進行新增,修改或者刪除欄位,

只需要下指令Add-Migration xxxxxxx就行了,

然後再進行Update-Database,並不會把資料庫整個刪了,

只會對你所修改的部分進行更新,並且產生對應的SQL指令。

估計你貼的那篇教學的那一部分,只是要表達,有特定情況下開發人員需要會刪除DB,

如果每次刪除資料內容需要重建會很麻煩,所以可以使用StoreInitializer辦法.

第一次回答問題,有錯誤請糾正和原諒
/images/emoticon/emoticon04.gif

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/

3
暐翰
iT邦大師 2 級 ‧ 2019-05-15 12:43:00

ksg 大大回復已經很好回答問題了

我這邊做一些小補充

那CodeFirst的機制會將舊有的資料完整保留並做合併轉移嗎?

不會保留舊有資料
只會保留歷史表格結構變動過程

如果CodeFirst是透過刪除與重建的方式來重建DB,那資料庫上的舊資料是否能被完善的保留下來呢?

sql使用的是alert語法,所以不會刪除表格再重新建立


請不要在正式環境使用CodeFirst Cli Update-Database做更新正式庫動作,會被阿嚕八到死...
請轉成SQL找半夜使用者低峰期時間給DBA執行

leo226 iT邦新手 5 級 ‧ 2019-05-15 17:35:21 檢舉

感謝先進指教,這邊再請教一下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的方式更新資料庫了呢?

暐翰 iT邦大師 2 級 ‧ 2019-05-15 19:06:40 檢舉

假定我們想要刪除A資料表的Column1欄位,那動作流程應該如何操作?

你的流程是對的

正式環境下就不建議使用CodeFirst的方式更新資料庫了呢?

對,不適合

我要發表回答

立即登入回答