今天來記錄一下在EF Core使用sqllite
如果要異動資料表內容要怎麼處理
先前在DBContext命名的Product Table
要rename成Products
因為產品可能是多個,複數會比較合理
另外就是需要異動欄位時,要如何操作
假設今天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只要有異動到DB的內容
rename 欄位或是table name時
產出來的migration會有一段drop的code
執行update DB會報錯
修改table名稱時
修改欄位名稱
查了一下原因
發現在sqllite不支援
如果使用sqlServer應該是不會有這個狀況
針對這個問題有兩個解決方式
刪除專案中DB檔
在專案下可以找到副檔名.db的檔案
將它刪除
remove migration
執行remove migrations 移除前面的migrations
dotnet ef migrations remove
新增migration
建立一個新的migrations
dotnet ef migrations add [updateMigration]
更新DB
dotnet ef database update
修改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/