EF CodeFirst下,当实体结构发生修改怎么更新数据库结构 【常用总结】

方法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;

 

posted @ 2020-07-30 10:48  进步者One  阅读(1925)  评论(0编辑  收藏  举报