20.2.翻译系列:EF 6中基于代码的数据库迁移技术【EF 6 Code-First系列】

原文链接:https://www.entityframeworktutorial.net/code-first/code-based-migration-in-code-first.aspx

在前面的一节中,你学习了自动迁移技术,当实体改变的时候,自动进行数据库迁移。这里你将会学习基于代码的数据库迁移技术。

基于代码的数据库迁移技术,在迁移的时候,提供了更多的控制。例如允许你配置添加额外的字符串,例如设置列的默认值,配置计算列等等。

为了使用基于代码的数据库迁移,你需要在程序包管理控制台中输入:

  1. Enable-Migrations:在项目中启用数据库迁移,然后会创建一个Configuration类
  2. Add-Migration:创建了一个迁移类,其中指定了Up和Down方法。
  3. Update-Database:执行Add_migration指令中创建的迁移,将改变应用到数据库中。

为了使用基于代码的数据库迁移,首先在程序包管理控制台中执行enable-migrations命令。

Enable-Migrations指令会创建Configuration类,这个Configuration类继承自DbMigrationsConfiguration ,Configuration类中包含这句代码:AutomaticMigrationsEnabled = false.

现在你需要在上下文类中设置数据库初始化策略为MigrateDatabaseToLatestVersion :

public class SchoolContext: DbContext
{
    public SchoolDBContext(): base("SchoolDB")
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<SchoolDBContext, EF6Console.Migrations.Configuration>());
    }

    public DbSet<Student> Students { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

    }
}

现在使用Add-Migration命令创建一个迁移类 ,后面跟着迁移类的名称:

上面的命令将会创建一个时间戳_SchoolDB-v1.cs文件,类里面包含Up和Down方法:

正如你所见,Up方法包含创建数据库对象的代码,并且Down方法包含删除数据库的代码。你同样可以编写代码,进行额外的配置。这就是优于自动迁移的地方。

为了了解更多add-migrations命令参数,你可以执行get-help add-migration或者get-help add-migration -detailed:

PM> get-help add-migration

NAME
    Add-Migration

SYNOPSIS
    Scaffolds a migration script for any pending model changes.

SYNTAX
    Add-Migration [-Name] <String> [-Force] [-ProjectName <String>] [-StartUpProjectName <String>]
        [-ConfigurationTypeName <String>]     [-ConnectionStringName <String>] [-IgnoreChanges]
        [-AppDomainBaseDirectory <String>] [<CommonParameters>]

    Add-Migration [-Name] <String> [-Force] [-ProjectName <String>] [-StartUpProjectName <String>]
        [-ConfigurationTypeName <String>] -ConnectionString <String> -ConnectionProviderName <String>
        [-IgnoreChanges] [-AppDomainBaseDirectory <String>] [<CommonParameters>]

DESCRIPTION
    Scaffolds a new migration script and adds it to the project.

RELATED LINKS

REMARKS
    To see the examples, type: "get-help Add-Migration -examples".
    For more information, type: "get-help Add-Migration -detailed".
    For technical information, type: "get-help Add-Migration -full".

在使用Add-Migration命令之后,你需要更新数据库。通过执行Update-Database命令,来提交修改到数据库中,还可以在后面加上–verbose 就可以看到生成的SQL脚本:

执行get-help update-database或者get-help update-database -detailed命令:

PM> get-help update-database

NAME
    Update-Database

SYNOPSIS
    Applies any pending migrations to the database.

SYNTAX
    Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force]
    [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>]
    [-ConnectionStringName <String>] [-AppDomainBaseDirectory <String>] [<CommonParameters>]

    Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force]
    [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>]
    -ConnectionString <String> -ConnectionProviderName <String> [-AppDomainBaseDirectory <String>]
    [<CommonParameters>]

DESCRIPTION
    Updates the database to the current model by applying pending migrations.

RELATED LINKS

REMARKS
    To see the examples, type: "get-help Update-Database -examples".
    For more information, type: "get-help Update-Database -detailed".
    For technical information, type: "get-help Update-Database -full".

到这个时候,数据库就被创建或更新了,现在不管什么时候,模型发生改变的时候,执行Add-Migration 带上参数名,就创建一个新的迁移文件,然后执行Update-Database命令,就将修改提交到数据库了。

迁移回退

假设你想要回退到之前的任何一个状态,那么你可以执行update-database后面跟着–TargetMigration,指定你想要回退的版本。例如,假设SchoolDB数据库有很多迁移记录,但是你想回退到第一个版本,那么你可以执行下面的代码:

PM> update-database -TargetMigration:SchoolDB-v1

原文地址:https://www.cnblogs.com/caofangsheng/p/10705341.html

时间: 2024-11-15 22:38:42

20.2.翻译系列:EF 6中基于代码的数据库迁移技术【EF 6 Code-First系列】的相关文章

20.翻译系列:Code-First中的数据库迁移技术【EF 6 Code-First系列】

原文链接:https://www.entityframeworktutorial.net/code-first/migration-in-code-first.aspx Entity Framework Code-First有很多不同的数据库初始化策略,例如:CreateDatabaseIfNotExists[创建数据库,如果不存在的话].DropCreateDatabaseIfModelChanges[如果模型发生改变的话,就删除重建数据库].DropCreateDatabaseAlways[

2. Code First Migrations With Entity Framework【EF中 Code-First 方式的数据库迁移】

前面的文章中,学习了EF 中的几种关系,一对一,一对多,多对多.但是相信大家肯定会有疑问: 1.我难道每次都要创建数据库么? 2.我怎么样从已经存在的表中,添加字段和移除字段呢? 3.当我向表中,添加字段或者移除字段,我怎么来避免丢失数据呢? 4.当数据库发生改变的时候,我怎么获取到创建数据库的脚本呢? 不用着急,这篇文章,我会向大家一一讲到: 首先,说说我们为什么要使用数据库迁移技术吧,因为我们的实体总是变动地很频繁,在上篇文章中,我们使用了数据库初始化策略来做,也就是每次当数据库不存在的时候

EF架构~codeFirst从初始化到数据库迁移

一些介绍 CodeFirst是EntityFrameworks的一种开发模式,即代码优先,它以业务代码为主,通过代码来生成数据库,并且加上migration的强大数据表比对功能来生成数据库版本,让程序开发人员不用维护数据库的变更,而直接维护migration即可,在它里面有你当前版本和过去历史版本的所有变更记录! (1)通过EF-CodeFirst自己帮我们建立了数据库,初始化的数据表 第一次建立数据模型,运行程序,自动建立数据库和数据表,并执行对应的初始化工作 数据模型 数据初始化 EF在Li

Java中四大代码块的运行顺序(附code)

验证证的方法是写code.例如以下: public class test { static class A { public static String name = "hello"; static { System.out.println("A static block1"); //1 } { System.out.println("A block3"); //3 } public A() { System.out.println("

20.1翻译系列:EF 6中自动数据迁移技术【EF 6 Code-First系列】

原文链接:https://www.entityframeworktutorial.net/code-first/automated-migration-in-code-first.aspx EF 6 Code-First系列文章目录: 1 翻译系列:什么是Code First(EF 6 Code First 系列) 2.翻译系列:为EF Code-First设置开发环境(EF 6 Code-First系列) 3.翻译系列:EF Code-First 示例(EF 6 Code-First系列) 4

asp.net core 系列 20 EF基于数据模型创建数据库

原文:asp.net core 系列 20 EF基于数据模型创建数据库 一.概述 本章使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序.使用迁移(migrations)基于数据模型创建数据库,是一种code first模式.可以在Windows 上使用 Visual Studio 2017,或在 Windows.macOS 或 Linux 上使用 .NET Core CLI 来学习.已经安装了NET Core 2.1 SDK,这

EF6与MVC5系列(5):使用数据库迁移( Code First Migrations)和发布

本节教程包含以下内容: 启用数据库迁移(Code First Migrations):迁移特性可以改变数据模型,并且不需要删除重建数据库就可以修改数据库架构. 部署在Azure中:这步骤是可选的,可以不发布在Azure中继续学习本教程后面的内容. ps:本文中只翻译Code First Migrations相关内容,有关如何在Azure中发布,可以查看原文:https://www.asp.net/mvc/overview/getting-started/getting-started-with-

C#中基于GDI+(Graphics)图像处理系列之前言

前言 图像处理工具类的全部源码 完整示例程序源码下载 示例程序截图 前言 图像处理是开发工程师们学习某种语言入门时就会遇到的问题,笔者刚开始接触C#使用GDI+进行图像处理,觉得太简单了,就没有深入研究,随着工作经验的积累,踏遍若干坑以后突然觉得还是有必要将这块的知识好好总结一下,毕竟还是有一些比较冷门的知识在实际应用中给我们的程序带来更多的灵活性,比如将图片保存成jpeg时进一步控制图片的质量.怎样获取任意角度旋转后的图像.怎样获取透明图像等等. 本文后面将直接放出图像处理工具类的全部源码和示

优化IPOL网站中基于DCT(离散余弦变换)的图像去噪算法(附源代码)。

在您阅读本文前,先需要告诉你的是:即使是本文优化过的算法,DCT去噪的计算量依旧很大,请不要向这个算法提出实时运行的苛刻要求. 言归正传,在IPOL网站中有一篇基于DCT的图像去噪文章,具体的链接地址是:http://www.ipol.im/pub/art/2011/ys-dct/,IPOL网站的最大特点就是他的文章全部提供源代码,而且可以基于网页运行相关算法,得到结果.不过其里面的代码本身是重实现论文的过程,基本不考虑速度的优化,因此,都相当的慢. 这篇文章的原理也是非常简单的,整个过程就是进