写点什么

在.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:521594
用户头像

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

关注

评论

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

ALL in ONE!博睿数据隆重举行ONE 2.0全面上线仪式

博睿数据

可观测性 智能运维 博睿数据 ONE平台

关于软件系统的帮助文档页面,你该知道的那些事儿

Baklib

帮助文档

软件测试面试真题 | 请介绍一下Python中的深拷贝和浅拷贝

测试人

Python 软件测试 面试题 测试开发

Flink 读写多套 Kerberos 认证的 Kafka 方案

移动云大数据

消失与存续——应用交付行业的跌宕演进

通明湖

负载均衡 高可用 云原生 信创

NFT质押挖矿分红dapp系统开发功能介绍

开发微hkkf5566

云科通明湖:金融业务可持续性能力建设,少不了这块“拼图”!

通明湖

负载均衡

云原生颠覆实践,可持续性应用创新引擎

通明湖

负载均衡 云原生

沉浸其境,共赴云栖数智硬核美学

阿里云CloudImagine

VR/AR 云栖大会 数智融合 超高清视频 云游戏

SAP | ABAP程序结构中的处理块

暮春零贰

SAP 模块化 10月月更

NFT质押挖矿分币系统开发模式定制

开发微hkkf5566

“程”风破浪的开发者|CTO浅谈数字化转型

CTO技术共享

学习方法 CTO 数字化转型 “程”风破浪的开发者

“程”风破浪的开发者|CTO浅谈数字化转型失败原因

CTO技术共享

学习方法 数字化转型 “程”风破浪的开发者

穿越周期性调整 英特尔多举措布局半导体产业

科技之家

千企千面,WorkPlus面向政企提供个性化的数智办公平台解决方案

BeeWorks

英特尔财报彰显系统级代工渐成气候

科技之家

SAP | 如何全局处理消息文本

暮春零贰

SAP 10月月更 动态消息

低代码又又又“出圈”了

优秀

低代码

颠覆性突破重构企业价值

通明湖

负载均衡 云原生

阿里最新产,SpringCloud微服务核心技术全解手册Github星标50k

程序员小毕

Java 微服务 后端 SpringCloud springcloudAlibaba

网络安全hw蓝队实战之溯源

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

可观测实践|如何使用阿里云 Prometheus 观测 ECS 应用

阿里巴巴云原生

阿里云 云原生

API 动态更新 Upstream

通明湖

API upstream 动态更新

浅谈长连接负载均衡

捉虫大师

负载均衡 长连接 10月月更

可观测可回溯 | Continuous Profiling 实践解析

阿里巴巴云原生

阿里云 云原生 可观测

中台“不火”了,企业“底座”却火了

BeeWorks

【网易云信】Sanitizers 系列之 address sanitizer 用法篇

网易智企

算法 开发语言

信息技术国产化浪潮中,云科通明湖如何助力企业转型蝶变?

通明湖

双活 高可用架构 自主可控

如何引发一场信创负载均衡领域的大变革?

通明湖

负载均衡 信创

即时通讯IM WorkPlus支持国产化信创环境

BeeWorks

Sanitizers 系列之 address sanitizer 用法篇

网易云信

算法 语言 & 开发

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