Migration——迁移

这篇具有很好参考价值的文章主要介绍了Migration——迁移。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

准备

微软文档:迁移
本文概要:如何在独立项目管理迁移?常用的迁移命令有哪些?

安装控制台工具

在包含 DbContext 项目以及后面的迁移项目中

Install-Package Microsoft.EntityFrameworkCore.Tools -Version 6.0.1

创建迁移

在 包含 DbContext 的项目中新增文件**DbContextFactory

public class WPDbContextFactory : IDesignTimeDbContextFactory<WPDbContext>
{
    public WPDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<WPDbContext>();

        string connStr = "Data Source=127.0.0.1;Initial Catalog=WP;User ID=sa;Password=123456";
        optionsBuilder.UseSqlServer(connStr);

        return new WPDbContext(optionsBuilder.Options);
    }
}

**DbContextFactory必须实现IDesignTimeDbContextFactory<out TContext>接口,TContext必须是DbContext类型。
在程序包管理控制台中,选择要进行迁移的包含DbContext的项目,然后执行命令添加一个迁移:

PM>add-migration initProject

会在项目目录下生成迁移目录 Migrations,其中包含模型快照和刚添加的迁移

使用独立项目管理迁移

步骤参照微软官方文档

  1. 新建一个类库项目

    PM>Install-Package Microsoft.EntityFrameworkCore.Relational -Version 6.0.1
    
  2. 添加对 DbContext 项目的引用

  3. 将迁移和模型快照文件移动到类库(在原始包含 DbContext 的项目中,先生成一个迁移,然后把迁移和模型快照移动到迁移项目中)

    也就是说,第一次迁移必须是从 DbContext 项目中复制过来的(复制后,DbContext中的可以删除)

配置迁移项目

在上面**DbContextFactory项目中配置迁移项目:

public class WPDbContextFactory : IDesignTimeDbContextFactory<WPDbContext>
{
    public WPDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<WPDbContext>();

        string connStr = "Data Source=127.0.0.1;Initial Catalog=WorkingPlatform;User ID=sa;Password=123456";
        optionsBuilder.UseSqlServer(connStr, d => d.MigrationsAssembly("WP.Migrations"));  // 唯一的改动,指定迁移项目程序集名称

        return new WPDbContext(optionsBuilder.Options);
    }
}

配置完成,在程序包管理控制台中,选择迁移项目,执行update-database,正常情况下迁移已经更新到数据库中了。
到这里在单独项目中使用迁移就OK了,原始的 DbContext 项目再也没有乱七八糟的迁移相关代码了,整个人都清爽了!

上面实现方式是参照官网,但不完全一致,如果不明白,还是要看官方文档相关文档

常用迁移命令

上面已经演示过:add-migration [changeName]update-database,在看看其他命令。

add-migration

add-migration命令还可以指定参数-OutputDir,来给迁移脚本指定输出目录:

PM> add-migration price -outputdir Migrations_SqlServer

可以用来给不同数据库生成不同的脚本分目录。

update-database

不指定迁移版本,默认把最新迁移更新到数据库:

PM>update-database

指定迁移版本:

PM>update-database 20220407143303_init

把数据库迁移到指定的版本,可以是回退(Removing)迁移也可以是应用(Applying)迁移

注意:可能会造成数据丢失

remove-migration

删除最后一次的迁移脚本

script-migration

不指定版本,则默认生成最新迁移版本的(全部)SQL脚本。

PM>script-migration

可以指定两个版本参数:

PM>script-migration [source] [target]

生成 source 版本到 target 版本的SQL脚本

source 是源版本,target 是目标版本

如果不指定 target,则默认生成到最新版本的SQL脚本

反向工程

反向工程是指:根据数据库表反向来生成实体类以及DbContext。

PM>Scaffold-DbContext "Data Source=127.0.0.1;Initial Catalog=WP;User ID=sa;Password=123456"

利用反向工程生成的类都被标记为partial不建议修改反向工程生成的文件,可以利用部分类特性来调整配置。
生成的 DBContext 文件中默认 override 了OnModelCreating方法,不过默认调用了部分方法OnModelCreatingPartial,可以自己配置部分方法OnModelCreatingPartial

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Book>(entity =>
    {
        entity.HasComment("书籍表");
    });

    modelBuilder.Entity<SysSetting>(entity =>
    {
        entity.ToTable("Sys_Settings");
    });

    OnModelCreatingPartial(modelBuilder);
}

partial void OnModelCreatingPartial(ModelBuilder modelBuilder);

partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
{ 
    // 自己配置,可以结合部分类放到单独文件中,避免直接修改反向工程生成的文件
}

反向工程生产的类,大部分情况下还需要自己调整(会挖坑),所以不建议在项目中使用反向工程文章来源地址https://www.toymoban.com/news/detail-529428.html

到了这里,关于Migration——迁移的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux page migration源码分析

    目录 概述 __unmap_and_move函数 step1: Lock the page to be migrated step2:  Insure that writeback is complete. step3: Lock the new page that we want to move to.  step4:  All the page table references to the page are converted to migration entries. step5-step15: move_to_new_page step 5- step11 step 12- 15 step 16-18 概述 Linux 内核page migrat

    2024年02月11日
    浏览(38)
  • You have 18 unapplied migration(s). Your project may not work properly until you apply the migration

        成功解决错误 : You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.Run \\\'python manage.py migrate\\\' to apply them.     错误的现象是什么,为什么会发生这个错误,怎么解决呢。本文为你详细解释。 目录 一、错误现象

    2024年02月15日
    浏览(49)
  • Django笔记二十之手动编写migration文件

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十之手动编写migration文件 前面介绍过,migration 文件主要记录的是 Django 系统 model 的变化,然后通过 migrate 命令将变化适配到数据库中。 比如在某个 application 下新增了某张表,或者对某张表更改了字段,可以生成 migration

    2023年04月09日
    浏览(45)
  • ActiveRecord::Migration.maintain_test_schema!

    测试gem: rspec-rails 问题描述 在使用 rspec-rails 进行测试时,出现了以下错误 这个错误与数据库架构有关。 schema.rb中 create_table \\\"users\\\", id: :string, default: - { \\\"init_id()\\\" }, force: :cascade do |t| 解决办法 为了解决这个问题,你需要在 config/environments/test.rb 文件中添加以下配置: 这会将数

    2024年02月07日
    浏览(33)
  • Gitlab升级报错二:rails_migration[gitlab-rails] (gitlab::database_migrations line 51)

    gitlab-ctl 修改文件目录后出现以下错误:从root -- home 先停掉gitlab: 单独启动数据库,如果不单独启动数据库,就会报以上错误 解决办法: 执行结束没有任何信息提示之后: 显示OK后, 重新加载配置: 最后重启gitlab:  

    2024年02月12日
    浏览(58)
  • 【Jetpack】使用 Room Migration 升级数据库并导出 Schema 文件 ( Schema 文件简介 | 生成 Schema 文件配置 | 生成 Schema 文件过程 )

    使用 Room Migration 升级数据库 , 需要根据当前数据库版本和目标版本编写一系列 Migration 迁移类 , 并生成一个升级的 Schema 文件 , 该文件是 json 格式的文件 , 其中包含如下内容 : 版本信息 : 包括 当前版本 和 目标版本 ; 创建表语句 : 包括 新增的表的 定义 和 字段信息 ; 删除表语

    2024年02月09日
    浏览(57)
  • 榕树贷款migrations迁移文件用于将合约部署到区块链上

    Migrations(迁移)是 JavaScript 文件,这些文件负责暂存我们的部署任务,并且假定部署需求会随着时间推移而改变。榕树贷款随着项目的发展,我们应该创建新的迁移脚本,来改变链上的合约状态。榕树贷款所有运行过的 migration 历史记录,都会通过特殊的迁移合约记录在链上

    2024年02月12日
    浏览(39)
  • .netframework迁移到.netcore方法

    一 .netframework程序迁移到.netcore5.0 对于.netframwork程序想要升级为.netcore5.0的方法,微软官方也给出了方法见 https://docs.microsoft.com/en-us/dotnet/desktop/winforms/migration/?view=netdesktop-5.0,我这里总结记录一下. 1.首先要检查自己应用程序适不适合迁移 .netframework框架和.netcore框架有很大的不同

    2024年02月04日
    浏览(27)
  • 记Flask-Migrate迁移数据库失败的两个Bug——详解循环导入问题

    1、找不到数据库:Unknown database ‘***’ 若还没有创建数据库,该迁移工具不会自动创建。你可以使用SQL命令手动创建一个数据库: 2、迁移后没有效果:No changes in schema detected. 我的情况长话短说,就是创建的数据模型类没有注册到程序实例 app ,解决方案是使用工厂函数。细

    2024年02月11日
    浏览(39)
  • 【Flask 连接数据库,使用Flask-Migrate实现数据库迁移及问题汇总】

    Flask 连接数据库,使用Flask-Migrate实现数据库迁移 安装Flask-Migrate插件 使用Flask-Migrate步骤 app.py主要用于数据库连接 model.py 中导入了 db,作用是存储一个User类 ,用于生成表头。 manager.py用于数据迁移管理,运行后将生成一个文件夹。 Flask-Migrate运行 问题汇总 问题一:flask_mig

    2024年01月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包