写点什么

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

  • 2009-01-21
  • 本文字数:962 字

    阅读完需:约 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

2009-01-21 22:521483
用户头像

发布了 157 篇内容, 共 58.8 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

惠普精灵家族助力IMC上海站,极致体验尽享电竞狂欢

E科讯

LeetCode题解:20. 有效的括号,for循环replace,JavaScript,详细注释

Lee Chen

大前端 LeetCode

一行代码实现简易服务器并共享文件

wangkx

Python 共享文件

linux入门系列14--ssh服务及主机远程管理

黑马腾云

Linux centos linux运维 红帽认证

linux入门系列15--文件传输之vsftp服务

黑马腾云

Linux centos linux操作 linux运维

不想做经理的程序员

escray

学习 面试

ARTS 挑战打卡第十一周(200720-200726)

老胡爱分享

ARTS 打卡计划

ARTS 挑战打卡第十二周(200727-200802)

老胡爱分享

ARTS 打卡计划

七夕情人节,程序员的表白方式简直太秀了!

程序员生活志

程序员 七夕

7. Jackson用树模型处理JSON是必备技能,不信你看

YourBatman

json Jackson ObjectMapper 树模型

追逐影子的人,最终只会是影子

小隐乐乐

七夕节来啦!AI一键生成情诗,去发给你的女朋友吧!

华为云开发者联盟

AI 智能高效 华为云 modelarts 七夕

高效程序员的45个习惯:敏捷开发修炼之道(5)

石云升

敏捷开发 熵增 用代码沟通

知识点:操作系统异常的分类

wangkx

操作系统 异常

linux入门系列13--磁盘管理之RAID、LVM技术

黑马腾云

Linux centos raid lvm 磁盘挂载

新晋“网红”Cat1 是什么

华为云开发者联盟

后端 物联网 华为云 无线通信 Cat.1

ARTS 挑战打卡第十三周(200803-200809)

老胡爱分享

ARTS 打卡计划

【程序员自救指南】一个证书,让我哄好了小师妹

华为云开发者联盟

网络安全 浏览器 华为云 SSL证书 安全证书

linux入门系列11--Centos7网络服务管理

黑马腾云

Linux centos 网络配置 运维工程师

13年毕业,用两年时间从外包走进互联网大厂!

小傅哥

成长 小傅哥 经历 工作 入职

正向代理与反向代理

wangkx

nginx 反向代理 代理 正向代理与反向代理 Proxy

SpreadJS 纯前端表格控件应用案例:货运代理客户服务平台

葡萄城技术团队

java安全编码指南之:基础篇

程序那些事

Java 安全编码 安全编码指南

ARTS 挑战打卡第十周(200713-200719)

老胡爱分享

ARTS 打卡计划

3.7亿条保单数据怎么分析?这个大数据平台有绝招

华为云开发者联盟

大数据 hadoop 数据湖 FusionInsight Kyligence

SpreadJS 纯前端表格控件应用案例:立信智能审计云平台(SACP)

葡萄城技术团队

Docker 最常用的镜像命令和容器命令

哈喽沃德先生

Docker 容器 微服务

英特尔大小核试水 将推出8+8+1架构酷睿处理器

E科讯

linux入门系列12--磁盘管理之分区、格式化与挂载

黑马腾云

Linux centos 编辑器 linux运维 vi/vim

Python实现一个计时功能的装饰器

wangkx

Python 装饰器

百度联合发布全球最大中文自然语言处理数据共建计划“千言”

百度大脑

人工智能 百度 nlp 百度大脑

在.NET中使用Rails风格的数据库迁移方式_.NET_Al Tenhundfeld_InfoQ精选文章