.NET Migration工具

Migration是一种分布环境下的数据库同步工具,出现在Ruby on Rail框架里,MigratorDotNet是一个.NET类似于Ruby on Rail的Migrations的数据库版本系统。支持的数据库有MySQL (5.0, 5.1) ,PostgreSQL ,SQLite ,SQL Server (2000, 2005),Oracle (没有经过很好测试),可以通过NantTask,MSBuildTarget, Console Application三种方式来使用。

Migrations的类是Migration的子类,Migration主要有两个方法:Up方法定义这个版本该做什么,Down定义怎么回滚版本.

每一个Migration都应该是数据库中一个非常小的增量修改,常用的尺寸是创建一个表和给表增加一个字段或者多个字段,修改表的数据和对表执行一个ExecuteQuery自定义查询。保持Migration的尽量小,这样方便在版本之间的迁移,就在版本控制系统SVN,TFS那样,Migration的例子是这样的:

// Version 1
 [Migration(1)]
 public class CreateUserTable : Migration
 {
 public void Up()
 {
 Database.CreateTable("User",
 new Column("UserId", DBType.Int32, ColumnProperties.PrimaryKeyWithIdentity),
 new Column("Username", DBType.AnsiString, 25)
 );
 }
 public void Down()
 {
 Database.RemoveTable("User");
 }
 } 

Migration属性使用一个整数来表示,代表当前的数据库版本,工具就是通过这个属性来决定数据库之间的迁移。你如果使用控制台程序,版本号作为参数传给控制台程序,当然你也可以使用NAnt脚本或者MSBuild脚本。

下面是一段NAnt编译脚本:

<?xml version="1.0" ?>
<project default="migrate">
         <property name="project.dir" value="."/>
         <property name="output.dir" value="${project.dir}\Output" />
   <loadtasks assembly="${project.dir}\lib\migrator\Migrator.NAnt.dll" />

         <target name="clean" description="Deletes the previously built directories">
                 <delete dir="${output.dir}" failonerror="false" />
         </target>

         <target name="build" description="Builds Migration Project" depends="clean">
                 <msbuild project="${project.dir}\src\Migrations.Project\Migrations.Project.csproj">
                         <property name="Configuration" value="Debug" />
                         <property name="OutDir" value="${output.dir}\\" />
                 </msbuild>
         </target>
         
         <!-- Database Migrations task -->
   <target name="migrate" description="Migrate the database" depends="build">
     <!-- Using a version of -1 will cause the migration to migrate to the latest version -->
     <property name="version" value="-1" overwrite="false" />
     <migrate
       provider="MySql"
       connectionstring="Database=mydb;Data Source=localhost;User Id=mysqluser;Password=mysqlpassword;"
       migrations="${output.dir}\Migrations.Project.dll"
       to="${version}" />
   </target>
</project>

如何写Migrate可以参看WritingMigrations。另外提一下SubSonic 2.1 RC1版本也增加Migrate功能,具体参看SubSonic: Using Migrations

数据库移植参考资料: http://api.rubyonrails.com/classes/ActiveRecord/Migration.html http://wiki.rubyonrails.org/rails/pages/UnderstandingMigrations http://wiki.rubyonrails.org/rails/pages/UsingMigrations

Getting Started with Migrator.NET

http://www.lostechies.com/blogs/sean_chambers/archive/2008/06/04/getting-started-with-migrator-net-and-database-refactorings.aspx

(outdated) http://macournoyer.wordpress.com/2006/09/20/database-migration-for-net

Where did Migrator.NET come from

http://macournoyer.wordpress.com/2007/09/18/the-migrations-for-net-project-is-not-dead-yet

Migrator.NET Good Practices

http://macournoyer.wordpress.com/2007/02/11/agile-database-fun-with-the-migrator

Migrate NAnt Task

http://macournoyer.wordpress.com/2006/10/15/migrate-nant-task

Database Migrations for .NET

http://www.zorched.net/2008/04/20/database-migrations-for-net/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏林德熙的博客

Roslyn 如何在 Target 引用 xaml 防止文件没有编译

在使用新的项目格式,可以使用 Target 添加项目,但是有一些项目需要在合适的时候添加,如果添加早了,那么会让用户看到这些文件,如果添加的时间是在引用编译之后...

9310
来自专栏草根专栏

asp.net core 2.0 查缺补漏

asp.net core 2.0 一些有用有趣的设置. 面向(targeting)不同的.net版本: 打开asp.net core 2.0的项目文件: xxx...

31850
来自专栏我的博客

max x Yosemide无法安装jdk8解决

1.下载 好jdk 1.7(1.8) 地址:http://www.oracle.com/technetwork/java/javase/downloads/in...

448130
来自专栏酷玩时刻

10分钟搭建属于自己的ngork服务器,实现内网穿透Window启动脚本Mac Linux启动脚本

ngrok 是一个使用go语言编写的反向代理软件,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

49230
来自专栏张善友的专栏

ASP.NET Web API 处理架构

这篇文章主要是介绍ASP.NET Web API的处理架构:当一个HTTP请求到达直到产生一个请求的过程。ASP.NET Web API 的处理架构图如下,主要...

31380
来自专栏草根专栏

用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) + 准备项目

32600
来自专栏difcareer的技术笔记

Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)[转]include <stdio.h>int func(int a, int b, int c, int d, int e,

声明:本文转自Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码),此文干货很多。

66950
来自专栏NetCore

了解EF CodeFirst的Migrator功能与Migrator.Net对比

在上一篇【数据库迁移利器:Migrator.Net】中,很多朋友提到了EF的CodeFirst也有数据库的迁移功能,说来真惭愧,玩了那么多年,至今还未去了解EF...

21490
来自专栏码农阿宇

在.Net Core中使用MongoDB的入门教程(一)

首先,我们在MongoDB的官方文档中看到,MongoDb的2.4以上的For .Net的驱动是支持.Net Core 2.0的。 ? 所以,在我们安装好了Ma...

39040
来自专栏数据分析

[译]Asp.net MVC 之 Contorllers(二)

URL路由模块 取代URL重写 路由请求 URL路由模块的内部结构 应用程序路由 URL模式和路由 定义应用程序路由 处理路由 路由处理程序 处理物理文件请求 ...

39860

扫码关注云+社区

领取腾讯云代金券