方法1:
由於.NetCore 沒有ADO.Net實體生成模型,所有數據庫結構改變后,程序中升級數據庫便不能向FarmWork程序一樣更新數據模型。 可在 VS 中,打開 【工具】-【NuGet 包管理器】-【程序包管理器控制台】菜單項,隨后就能打開控制台窗口。輸入以下命令 Scaffold-DbContext "Server=.;Database=數據庫名稱;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force -UseDatabaseNames 即可。 此語句會覆蓋之前生成數據。
方法2:
使用dotnet ef命令創建Migrations:dotnet ef migrations add [NAME]
修改Blog類,添加一個字段public string NewField { get; set; }
,在命令行執行命令dotnet ef migrations add NewField
,然后運行程序,可以看到數據庫已經更新,__EFMigrationsHistory表也多了一條對應的記錄
方法2:(命令要大寫)
我們只需在Configuration類的構造函數里面插入一句:AutomaticMigrationDataLossAllowed = true;就行了。
然后在程序包管理控制台輸入命令:
Add-Migration init
Update-Database init 就完成了這種修改,當然,很多情況下運行updata-database修改會報錯,如果報錯我們可以強制運行,只需加上一個參數-force,完整命令:Update-Database -Force
注意:sqlite微型數據庫 刪除表中的一個字段不支持,報錯如下
SQLite does not support this migration operation ('DropColumnOperation'). For more information, see http://go.microsoft.com/fwlink/?LinkId=723262
sqlite微型數據庫 刪除表中的一個字段不支持,報錯如下 解決辦法:
由於項目需求變更,我需要在sqlite的表中刪除一個字段,通用的sql操作語句如下: alter table task drop column custom_fields; 結果數據庫提示如下錯誤: sqlite> ALTER TABLE task DROP COLUMN custom_fields; Error: near "DROP": syntax error 搜索得知,原來SQLite目前還不支持drop column,所以必須想出另外一種方法來進行表字段的刪除。 如下sql語句會復制一個和record表一樣表結構的temp表出來,但是我們想要的是去除某一個字段(例如去除record表中的name字段,就不要復制它就好了),所以sql語句如下: create table temp as select id, name, type, trigger, state, next_run_time, description, failed_times, scheduler from task where 1 = 1; 這樣復制出來的表就會缺少“custom_fields”字段,然后我們刪除舊表並修改新表名即可。 drop table task; alter table temp rename to task;