iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
0
Modern Web

ASP.NET Core 入門實戰30天系列 第 24

Day 24 使用ASP .NET Core 手把手打造一個購物網站 - 使用EF Core 異動欄位

  • 分享至 

  • xImage
  •  

前言

今天來記錄一下在EF Core使用sqllite
如果要異動資料表內容要怎麼處理

問題

先前在DBContext命名的Product Table
要rename成Products
因為產品可能是多個,複數會比較合理
另外就是需要異動欄位時,要如何操作


使用EF Core 異動資料表

正規的方式

假設今天Model有異動
基本上修改Model裡面的.cs,在DBcontext更新
新增一個migration
接著update資料庫就可以了

舉例假設今天要新增一個photo的欄位
首先只要先將新增Modle裡面的參數

因為這個只是新增欄位,所以DBContext裡面的不需要調整
如果要加入seed data也可以在這邊一起修改

新增migration

 dotnet ef migrations add [updateMigration]

異動DB

dotnet ef database update

一般來說只要修改好model還有相關用到的欄位
新增一個migrations,接著update DB就可以了

sqllite的問題

實際在測試時發現
sqllite只要有異動到DB的內容
rename 欄位或是table name時
產出來的migration會有一段drop的code
執行update DB會報錯

修改table名稱時

修改欄位名稱

查了一下原因
發現在sqllite不支援
如果使用sqlServer應該是不會有這個狀況

針對這個問題有兩個解決方式

  1. 砍掉資料庫重新migration
    這個應該就是大絕招了吧
    如果專案只是在初期或許還堪用
    但缺點就是需要備份DB的資料,不然DB的資料就drop掉了
    除非不需要DB的資料或是一開始建置的期間,這個或許是一個方法
    但整體來說不太建議這麼處理
    • 刪除專案中DB檔
      在專案下可以找到副檔名.db的檔案
      將它刪除

    • remove migration
      執行remove migrations 移除前面的migrations

      dotnet ef migrations remove
      
    • 新增migration
      建立一個新的migrations

       dotnet ef migrations add [updateMigration]
      
    • 更新DB

      dotnet ef database update
      
  2. 修改migrations檔案,使用sql語法更新
    這個是比較好的作法
    • 修改migrations檔案
      使用migrationBuilder.Sql()方法
      直接輸入sql語法

    • 更新DB

       dotnet ef database update
    
    • 執行畫面

參考資料:
https://www.entityframeworktutorial.net/efcore/entity-framework-core-migration.aspx

https://github.com/dotnet/AspNetCore.Docs/issues/11268

https://t-heiten.net/ef-core/fix-sqlite-migration/


上一篇
Day 23 使用ASP .NET Core 手把手打造一個購物網站 - 新增Repository
下一篇
Day 25 使用ASP .NET Core 手把手打造一個購物網站 - Create & Read
系列文
ASP.NET Core 入門實戰30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言