BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

在.NET中使用Rails风格的数据库迁移方式

| 作者 Al Tenhundfeld 关注 0 他的粉丝 ,译者 赵劼 关注 4 他的粉丝 发布于 2009年1月23日. 估计阅读时间: 3 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

维护可变的代码库,尤其是进行持续集成的关键,便是与.NET代码一起对数据库架构进行版本控制。许多使用.NET的项目组都使用手写的脚本或架构自动比对工具。Ruby on Rails使用了一个流行的解决方案来处理这个工作,它将DDL SQL语句抽象为Ruby命令,这个工具便是migrations

下面为一段使用Ruby编写的Rails迁移代码,定义了一个创建和删除数据库中Users表的行为:

Rails Migration

使用RikMigrations类库就可以使用C#编写类似的代码:

RikMigration in C#

这里最重要概念是,所有定义数据库脚本的DDL都被抽象并添加至应用程序代码中了。这样做有以下几点优势:

  • 数据库平台无关:将DDL抽象为.NET方法之后,开发人员可以只编写一次创建表格的脚本,迁移类库便会将.NET代码转化为不同数据库平台的脚本。这样就无须为Oracle准备一份安装脚本的同时再为SQL Server准备一份了。
  • 可集成版本控制:如果迁移代码能够和应用程序代码一起放进项目源码管理仓库,那么就能为迁移代码轻易地创建分支或打上标签,以确保任何版本的代码库都可以构建一份一致的数据库。
  • 自动升级或降级:一个迁移一般有一个Up方法和Down方法。Up方法定义了修改数据库的行为(例如创建数据表),而Down方法定义了回滚这次操作的行为(如删除数据表)。如果迁移工作与其它代码一并被版本化了,那么您就可以通过执行一个升级路径,自动将一个旧的数据库升级到当前状态。

.NET社区尚未广泛采用这种类迁移方式,除了对这种做法不熟悉之外,还有一些其他因素阻碍了它的推广。比如许多.NET项目组都使用大量数据库的存储过程;对脚本进行版本化管理可能更适合使用存储过程的系统,同时平台无关性也并非那么重要了;此外,对于由独立DBA进行数据库管理的大型应用程序,把DDL放入.NET代码的做法往往并不可行。

目前有两个.NET迁移类库在社区中发展良好:RikMigrations代码)和Migrator.NET。RikMigrations是一个更为流行的类库,支持一个更为友好的界面和命令行接口。不过,它的主要开发者在去年中期就已经停止更新代码。Migrator.NET目前则慢慢流行开来,它的新界面和自动集成功能也愈发成熟。两者都是轻巧的开源项目,开发人员可以对其提供更多支持。

Justion Etheredge是一个C# MVP,他写了一个有用的RikMigrations入门向导,其中也包括一些配置要点。

查看英文原文:Rails Style Database Migrations in .NET

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

关键是,测试数据如何一并进行管理 by Jeffrey Zhao

其实这些功能VSTS DB也能做,关键还是如何在DB Schema可管理之后,使测试数据一并加入版本管理。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT