使用FluentMigrator进行数据库迁移
介绍
在开发的过程中,经常会遇到数据库结构变动(表新增、删除,表列新增、修改、删除等)。开发环境、测试环境、正式环境都要记性同步;如果你使用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进行数据库迁移的更多相关文章
- 如何使用FluentMigrator进行数据库迁移
		标题:如何使用FluentMigrator进行数据库迁移 地址:https://www.cnblogs.com/lwqlun/p/10649949.html 作者: Lamond Lu FluentM ... 
- 数据库迁移 Migrator.Net
		转载: [强烈推荐]数据库迁移利器:Migrator.Net Migrator.NET:https://github.com/migratordotnet/Migrator.NET fluentmig ... 
- EF Code First Migrations数据库迁移
		1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ... 
- 2.EF中 Code-First 方式的数据库迁移
		原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ... 
- laravel数据库迁移(三)
		laravel号称世界上最好的框架,数据库迁移算上一个,在这里先简单入个门: laravel很强大,它把表中的操作写成了migrations迁移文件,然后可以直接通过迁移文件来操作表.所以 , 数据迁 ... 
- Code First开发系列之数据库迁移
		返回<8天掌握EF的Code First开发>总目录 本篇目录 开启并运行迁移 使用迁移API 应用迁移 给已存在的数据库添加迁移 EF的其他功能 本章小结 自我测试 本系列的源码本人已托 ... 
- ABP Migration(数据库迁移)
		今天准备说说EntityFramework 6.0+,它与我之前所学的4.0有所区别,自从4.1发布以来,code first 被许多人所钟爱,Dbcontext API也由此时而生.早在学校的时候就 ... 
- sqlserver 2008R2数据库迁移oracle
		x项目需要,将以前的sqlserver数据库迁移的oracle数据库中,由于以前对oracle只是在DML语句的步骤,所以总结一下这次遇到的问题以及具体步骤 1,oracle新建数据库 新建Oracl ... 
- 【强烈推荐】数据库迁移利器:Migrator.Net
		简介 很郁闷,写了一天的遇到LiveWriter错误,可恶啊 几年前在做项目中第一次接触到了Migrator.Net,就深深被吸引住了,至此以后在新的大项目中,我都会使用Migrator.Net来创建 ... 
随机推荐
- select2清除选择(选择框内的值)
			首先清空option很简单:$("#select2_id").empty();但是这样清除了之后,选中的值仍然在文本框里显示着: 这个功能很小,只是一个函数的问题,之所以写这篇文章 ... 
- Python学习笔记-常用内置函数
			输出:print() 功能:输出打印 语法:print(*objects, sep=' ', end='\n', file=sys.stdout) 参数:objects----复数,表示可以一次输出多 ... 
- jq获取图片并转换为base64
			html代码: <input type="file" id="file1"/> jq代码: $('#file1').change(function( ... 
- Python:每日一题006
			题目:斐波那契数列. 程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.…… 个人思路及代码: # 方 ... 
- 返回头部js
			$('.backTop, .backCss').click(function() { var id=$(this).attr('class'); $('html, body').animate({sc ... 
- 20175316盛茂淞 《java程序设计》第三周课堂测试错题总结
			20175316盛茂淞 <java程序设计>第三周课堂测试错题总结 出现问题 错题总结 题目1 在Ubuntu中用自己的有位学号建一个文件,教材p87 Example4_15 1. 修改代 ... 
- javascript跨域传递消息 / 服务器实时推送总结
			参考文档,下面有转载[非常好的两篇文章]: http://www.cnblogs.com/loveis715/p/4592246.html [跨源的各种方法总结] http://kb.cnblogs. ... 
- bug的一些事
			Bug级别:(由高到低) 1.critical:系统直接崩溃,瘫痪.无法正常打开使用产品 2.Block:逻辑出现严重问题,流程卡住,无法进行下一步 3.Major:部分功能出现闪退,功能没有实现,但 ... 
- Mac OS X 恢复 VMware Fusion 虚拟机中的 vmdk 文件
			今天手贱把 VMware Fusion 虚拟机中的 Windows 10 搞挂了,原因是磁盘清理了下,然后重启就蓝屏了,Windows 10 自动修复.手动还原.手动重置系统,试过都不行,恢复系统是没 ... 
- MySQL 基础--字符类型
			##=====================================================================================## MySQL支持的字符 ... 
