介绍

在开发的过程中,经常会遇到数据库结构变动(表新增、删除,表列新增、修改、删除等)。开发环境、测试环境、正式环境都要记性同步;如果你使用EF有自动迁移的功能,还是挺方便的。如果非EF我们需要手工处理,有时候会忘记,繁琐。恰好 网上有提供的工具来实现类似EF的迁移功能。如:SQL Server Data Tools、Fluent Migrator、RoundhousE、 DbUp、Conclusion;本文将着重分享下如何使用Fluent Migrator进行数据库迁移。

Fluent Migrator

Fluent Migrator是.NET下的一个数据库迁移框架。我们可以利用Migration基类,编写数据结构改变,它有两个方法Up()和Down()。up方法用于升级迁移,down用于回滚。

 如何使用Fluent Migrator

下面以创建一个论坛,帖子表为例。

创建一个迁移类库,命名为DatabaseMigration,在命令行中安装:Install-Package FluentMigrator

然后添加一个迁移类CreateTopicTable_201811091800.cs继承Migration,代码如下

 [Migration()]
public class CreateTopicTable_201811091800 : Migration
{ public override void Up()
{
Create.Table("Topic")
.WithColumn("Id").AsInt64().PrimaryKey().Identity()
.WithColumn("TopicTitle").AsString();
} public override void Down()
{
Delete.Table("Topic");
}
}

我们创建了一个继承Migration类。实现了接口Up()和down()方法,在up方法了创建一个Topic表并且添加了两个字段,我们进行升级迁移时将会调用up方法;down方法里 我们可以进行回滚删除该表。[Migration(201811091800)] 这个是版本定义,数据库会自动创建一个表进行版本维护。FluentMigrator还提供其他的接口如:Alter,Create,Rename,Insert,Delete,Execute等。

运行迁移

执行迁移利用Migrate.exe工具,(Install-Package FluentMigrator.Console)安装之后会出现在packages\FluentMigrator.Console.3.1.3中

打开cmd运行以下命令:

packages\FluentMigrator.Console.3.1.3\net461\any\Migrate.exe /conn "Data Source=.;Initial Catalog=migrationDemo;Persist Security Info=True;User ID=sa;Password=123;"/db sqlserver2014 /assembly  "DatabaseMigration\bin\Debug\DatabaseMigration.dll"

执行成功

打开数据库我们会发现多了一张Version表

打开version表;你会发现表里面有一条迁移记录,version(版本号是可以自定义的),appliedon(执行时间),description(描述如果不自定义默认是类名称)

回滚数据库

业务的变更,经常会变动数据表或表结构,使用面命令很容易进行管理。

Migrate.exe /conn "Data Source=.;Initial Catalog=migrationDemo;Persist Security Info=True;User ID=sa;Password=lee2018;" /db sqlserver2014 /assembly "DatabaseMigration\bin\Debug\DatabaseMigration.dll" /task rollback --steps=1

你会发现 命令结尾处多了task rollback --steps=1 ;如果没有task  默认是指migrate up。 task用法如图

输出显示 CreateTopicTable_201811091800 reverted 恢复成功。此时实际上执行的是 Delete.Table("Topic");。

总结

使用 Fluent Migrator 很容易的去升级迁移和回滚数据库。最后分享下迁移助手小工具

截图如下:图1 可以直接执行命令

图2,如果在已有的数据表的情况下,利用自动创建免去了手工去编写迁移文件

最后附上源码地址https://github.com/ChengLab/DBMigrationTool

参考:

Ants-----https://www.cnblogs.com/ants/p/4037312.html

官网----https://fluentmigrator.github.io/index.html

使用FluentMigrator进行数据库迁移的更多相关文章

  1. 如何使用FluentMigrator进行数据库迁移

    标题:如何使用FluentMigrator进行数据库迁移 地址:https://www.cnblogs.com/lwqlun/p/10649949.html 作者: Lamond Lu FluentM ...

  2. 数据库迁移 Migrator.Net

    转载: [强烈推荐]数据库迁移利器:Migrator.Net Migrator.NET:https://github.com/migratordotnet/Migrator.NET fluentmig ...

  3. EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  4. 2.EF中 Code-First 方式的数据库迁移

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...

  5. laravel数据库迁移(三)

    laravel号称世界上最好的框架,数据库迁移算上一个,在这里先简单入个门: laravel很强大,它把表中的操作写成了migrations迁移文件,然后可以直接通过迁移文件来操作表.所以 , 数据迁 ...

  6. Code First开发系列之数据库迁移

    返回<8天掌握EF的Code First开发>总目录 本篇目录 开启并运行迁移 使用迁移API 应用迁移 给已存在的数据库添加迁移 EF的其他功能 本章小结 自我测试 本系列的源码本人已托 ...

  7. ABP Migration(数据库迁移)

    今天准备说说EntityFramework 6.0+,它与我之前所学的4.0有所区别,自从4.1发布以来,code first 被许多人所钟爱,Dbcontext API也由此时而生.早在学校的时候就 ...

  8. sqlserver 2008R2数据库迁移oracle

    x项目需要,将以前的sqlserver数据库迁移的oracle数据库中,由于以前对oracle只是在DML语句的步骤,所以总结一下这次遇到的问题以及具体步骤 1,oracle新建数据库 新建Oracl ...

  9. 【强烈推荐】数据库迁移利器:Migrator.Net

    简介 很郁闷,写了一天的遇到LiveWriter错误,可恶啊 几年前在做项目中第一次接触到了Migrator.Net,就深深被吸引住了,至此以后在新的大项目中,我都会使用Migrator.Net来创建 ...

随机推荐

  1. Eclipse Android 模拟器启动过慢

    打开AVD Manager窗口,在模拟器配置页面,选择Intel Atom (x86)选项.笔记本的CPU处理器是Intel 酷睿. 可以发现模拟器的启动速度明显变快.

  2. HDU 5828 Rikka with Sequence(线段树区间加开根求和)

    Problem DescriptionAs we know, Rikka is poor at math. Yuta is worrying about this situation, so he g ...

  3. 最长子序列dp poj2479 题解

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 44476   Accepted: 13796 Des ...

  4. [leetcode]3. Longest Substring Without Repeating Characters无重复字母的最长子串

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  5. 源码安装 odoo12 -- 问题记录

    odoo12启动过程中遇到的问题,及解决办法:1.ImportError: No module named ‘win32service’pipenv install pypiwin32 2.Impor ...

  6. 通过Solrj实现对索引库中数据的局部更新操作

    for (UpdateIndexDTO updateIndexDTO : data) { // 局部更新 SolrInputDocument doc = new SolrInputDocument() ...

  7. C#sealed和final

    sealed用于类时,该类被称为密封类,密封类不能被继承: C#提出了密封方法(sealed method) 的概念,以防止在方法所在类的派生类中对该方法的重载.对方法可以使用sealed 修饰符,这 ...

  8. # 2019-2020.3 《java程序设计》第一周学习总结

    2019-2020-3 <Java 程序设计>第一周学习总结 在本周的学习中,学习到了好多也收获了好多,从最基础的安装虚拟机开始,根据老师的博客中的教程一步一步的进行,在这过程中也遇到了好 ...

  9. Nodejs之路:非I/O的异步API

    本篇主要介绍setTimeout,setInterval,setImmediate和process.nextTick. 1,定时器 Node中的定时器和浏览器中用法一致.区别在于:在Node中,执行到 ...

  10. 位图法bitmap

    1.概念 1)所谓bitmap,就是用每一位(bit)来标记某个元素对应的value, 而key即是该元素,通常bitmap是一个int数组,用每一个int数的每一个bit来映射某个数据 2)由于采用 ...