zoukankan      html  css  js  c++  java
  • Entity Framework Core系列教程-26-数据迁移

    Entity Framework Core数据迁移

    迁移是一种通过保留数据来使数据库架构与EF Core模型保持同步的方法。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K5pXisZH-1581165405062)(d:
oteefcorepic28.png)]
    如上图所示,EF Core API从域(实体)类构建EF Core模型,并且EF Core迁移将基于EF Core模型创建或更新数据库架构。每当更改域类时,都需要运行迁移以使数据库架构保持最新。
    EF Core迁移是一组命令,您可以在NuGet软件包管理器控制台或dotnet命令行界面(CLI)中执行。
    下表列出了EF Core中的重要迁移命令。

    程序包管理器控制台命令 dotnet 命令行命令 使用方法
    add-migration <migration name> Add <migration name> 通过添加迁移快照来创建迁移
    Remove-migration Remove 删除最后一个迁移快照
    Update-database Update 根据上一个迁移快照更新数据库架构
    Script-migration Script 使用所有迁移快照生成SQL脚本

    添加迁移

    第一次,您定义了初始领域类。此时,您的应用程序没有数据库可以存储您的域类中的数据。因此,首先,您需要创建一个迁移。

    从Visual Studio中的工具-> NuGet软件包管理器->软件包管理器控制台中打开软件包管理器控制台,然后执行以下命令以添加迁移。

    add-migration MyFirstMigration
    

    如果使用的是dotnet命令行界面,请执行以下命令。

    dotnet ef migrations add MyFirstMigration
    

    在以上命令中,MyFirstMigration是迁移的名称。这将在项目的“迁移”文件夹中创建三个文件,如下所示。
    在这里插入图片描述

    1. <timestamp>_<迁移名称>.cs:主迁移文件,其中包含Up()和Down()方法中的迁移操作。 Up()方法包括用于创建数据库对象的代码,而Down()方法包括用于删除数据库对象的代码。
    2. <时间戳>_<迁移名称>.Designer.cs:迁移元数据文件,其中包含EF Core使用的信息。
    3. <contextclassname> ModelSnapshot.cs:当前模型的快照。这用于确定在创建下一个迁移时所做的更改。
      现在,在创建迁移快照之后,该创建数据库了。

    创建或更新数据库

    使用以下命令创建或更新数据库架构。

    1. 程序包管理器控制台
    Update-Database
    
    1. dotnet 命令行
    dotnet ef database update
    

    Update命令将基于上下文和域类以及迁移快照创建数据库,这些快照是使用add-migration或add命令创建的。
    如果这是第一次迁移,则还将创建一个名为__EFMigrationsHistory的表,该表将存储所有迁移的名称以及何时将它们应用于数据库。
    在这里插入图片描述

    删除迁移

    如果上一次迁移未应用到数据库,则可以将其删除。使用以下remove命令删除上一次创建的迁移文件并还原模型快照。

    1. 程序包管理器控制台
    remove-migration
    
    1. dotnet 命令行
    dotnet ef migrations remove
    

    上面的命令将删除上一次迁移,并将模型快照还原为之前的迁移。请注意,如果已将迁移应用于数据库,则它将引发以下异常。
    迁移<迁移名称>已被应用于数据库。还原它,然后再试一次。如果已将迁移应用于其他数据库,请考虑使用新迁移来还原其更改。

    还原迁移

    假设您更改了域类,并使用add-migration命令创建了名为MySecondMigration的第二个迁移,并使用Update命令将该迁移应用于数据库。但是,由于某种原因,您想将数据库还原到以前的状态。在这种情况下,请使用update-database <迁移名称>命令将数据库还原到指定的先前迁移快照。

    1. 程序包管理器控制台
    Update-database MyFirstMigration
    
    1. dotnet 命令行
    dotnet ef database update MyFirstMigration
    

    上面的命令将基于名为MyFirstMigration的迁移还原数据库,并删除应用于名为MySecondMigration的第二个迁移的所有更改。这还将从数据库的__EFMigrationsHistory表中删除MySecondMigration条目。

    注意:这不会删除与MySecondMigration相关的迁移文件。使用remove命令将其从项目中删除。

    生成SQL脚本

    使用以下命令为数据库生成SQL脚本。

    1. 程序包管理器控制台
    script-migration
    
    1. dotnet 命令行
    dotnet ef migrations script
    

    上面的脚本命令默认将包含所有迁移的脚本。您可以使用-to和-from选项来指定迁移范围。

    程序包管理器控制台命令进行迁移

    可以使用Visual Studio中的程序包管理器控制台执行Entity Framework Core中的迁移命令。从Visual Studio中的工具-> NuGet软件包管理器->软件包管理器控制台中打开软件包管理器控制台,以执行以下命令。

    程序包管理器控制台 用法
    Get-Help entityframework 获取帮助entityframework显示有关实体框架命令的信息
    Add-Migration <迁移名称>通过添加迁移快照来创建迁移
    Remove-Migration 删除最后一个迁移快照
    Update-Database 根据上一个迁移快照更新数据库架构
    Script-Migration 使用所有迁移快照生成SQL脚本
    Scaffold-DbContext 为指定的数据库生成DbContext和实体类型类。这称为逆向工程
    Get-DbContext 获取有关DbContext类型的信息
    Drop-Database 删除数据库

    Get-Help 获取帮助

    get-help entityframework
    

    Add-Migration 添加迁移

    get-help entityframework
    

    Remove-Migration 删除迁移

    get-help entityframework
    

    Update-Database 更新数据库

    get-help entityframework
    

    Script-migration 脚本迁移

    get-help entityframework
    

    scaffold-dbcontext 支架数据库上下文

    get-help entityframework
    

    Get-DbContext

    get-help entityframework
    

    Drop-Database 删除数据库

    get-help entityframework
    

    用于迁移的命令行界面命令

    使用.NET Core Command List Interface执行实体框架核心命令。要使用.NET CLI,请通过编辑.NET Core项目的.csproj文件,在<ItemGroup>节点下添加<DotNetCliToolReference Include =“ Microsoft.EntityFrameworkCore.Tools.DotNet” Version =“ 2.0.0” />。
    打开命令提示符,然后导航到项目的根文件夹,然后输入dotnet ef --help列出EF Core命令,如下所示。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cD0PztSl-1581165405066)(d: oteefcorepic31.png)]

    正如您在上面看到的,有三个主要的EF命令可用:数据库,dbcontext和迁移。下表列出了所有EF命令和子命令。

    命令 子命令 用法
    Database drop 删除数据库
    update 将数据库更新为指定的迁移
    DbContext info 获取有关DbContext类型的信息
    list 列出可用的DbContext类型
    scaffold 为数据库提供DbContext和实体类型
    Migration add 添加新的迁移
    list 列出可用的迁移
    remove 删除上一次迁移
    script: 从迁移生成SQL脚本

    让我们看看每个命令的可用选项。

    Database Drop

    dotnet ef database drop
    

    Database Update

    dotnet ef database update
    

    DbContext Info

    dotnet ef dbcontext info
    

    DbContext List

    dotnet ef dbcontext list
    

    DbContext Scaffold

    dotnet ef dbcontext scaffold
    

    Add

    dotnet ef migrations add
    

    List

    dotnet ef migrations list
    

    Remove

    dotnet ef migrations remove
    

    Script

    dotnet ef migrations script
    
  • 相关阅读:
    struct--file_operations
    接触到的一些数据结构: LIST_ENTRY, TAILQ
    Kernel Mode, User Mode
    可运行的代码
    写一篇Hook Driver.
    Chromium学习笔记
    Resources for Browser/Webkit/GPU
    Win7/8, convert dynamic disk volume to basic volume.
    System and Device power management.
    错误记录1----dom4j解析xml调试编码错误
  • 原文地址:https://www.cnblogs.com/AlexanderZhao/p/12878797.html
Copyright © 2011-2022 走看看