EFCodeFirst下,当实体结构发⽣修改怎么更新数据库结构【常⽤总结】
波特兰⽅法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 go.microsoft/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 where1 = 1;
这样复制出来的表就会缺少“custom_fields”字段,然后我们删除旧表并修改新表名即可。
drop table task;
alter table temp rename to task;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论