zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    Learning to Compare: Relation Network for Few-Shot Learning 论文笔记
    修改python import模块中的变量
    roslaunch保存的log文件没有打印的ERROR信息
    python json demo
    vscode 1.32.x按下鼠标左键无法拖曳选择,而旧一点的版本1.30.2可以
    java-ee--------jdbc
    集合
    关键字
    java面向对象
    数组
  • 原文地址:https://www.cnblogs.com/netcs/p/13402498.html
Copyright © 2011-2022 走看看