写点什么

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

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

关注

评论

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

DDD洋葱架构才是 yyds!阿里大牛手记(DDD)领域驱动设计应对之道

做梦都在改BUG

Java 领域驱动设计 DDD 架构师

MacOS SVN 客户端:Cornerstone 4永久许可证

理理

Mac 系统 SVN客户端 Cornerstone for Mac Cornerstone下载 Cornerstone 4

TCP协议中的粘包和半包问题

做梦都在改BUG

TCP TCP协议 粘包 半包

VMware fusion pro13下载 VM虚拟机安装教程

理理

VMware Fusion Pro 13 VMware Fusion虚拟机 VM虚拟机破解版

开源7天Github斩获4.5万Stars!阿里2023版高并发设计实录鲨疯了

程序员小毕

数据库 程序员 面试 高并发 架构师

千亿流量并发治理!Alibaba实战Sentinel笔记,为微服务保驾护航

做梦都在改BUG

Java 微服务 sentinel 高并发 流量治理

5分钟搞懂NESAS

俞凡

安全 网络 通信

系统清理工具:Cocktail 16.3.3注册激活版

真大的脸盆

Mac Mac 软件 清理工具 清理优化 清理优化软件

D-ONE计划解读|得帆云DeCode持续引领低代码产品演进!

得帆信息

新产品 低代码平台 aPaaS

从阿里出发看微服务发展!P8架构师手打800页微服务深度解析笔记

做梦都在改BUG

Java 架构 微服务

好家伙!GitHub公选“头牌”阿里大牛开源1300页炫彩性能调优手记

做梦都在改BUG

Java 性能优化 性能调优

Java岗程序员必备学习方向,全会拿45Koffer没问题!

Java你猿哥

Java 面试 面经 Java工程师 春招

肝完阿里最新Java并发编程全优笔记,我成功晋升公司架构组

Java你猿哥

Java 架构师 并发 面经 Java工程师

ChatGPT - SpringBoot Prompting Chain

Marvin Ma

软件开发 ChatGPT

Github标星42K!不愧是腾讯云大神亲码的“redis深度笔记”

采菊东篱下

Java redis 面试

LED显示屏近年来在中国的发展趋势

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

前端面试实录HTTP篇

Immerse

https HTTP 前端面试 前端已死

在Vue中,为什么从 props 中解构变量之后再watch它,无法检测到它的变化?

Lee Chen

JavaScript Vue3

Macos壁纸软件|动态壁纸Dynamic Wallpaper灵动你的桌面!

理理

Dynamic Wallpaper下载 mac动态壁纸 Mac壁纸app 苹果软件资源站 壁纸高清

TypeScript常用代码块

青柚1943

Bettertouchtool for Mac(触摸板增强神器)使用教程

理理

BetterTouchTool破解 BetterTouchTool教程 Mac触控板增强

intellijidea卸载重装无法打开怎么办?IntelliJ IDEA彻底卸载教程

Rose

IntelliJ IDEA 2023下载 IntelliJ IDEA 2023破解 IntelliJ IDEA 2023最新 IntelliJ IDEA卸载

Mac 无线网络扫描工具:WiFi Explorer 3.4.2 (57)激活汉化版

真大的脸盆

无线管理 wifi工具

QEMU事件循环机制

Linux内核拾遗

Linux Kenel 虚拟化 事件和事件循环 qemu kvm

网络IO模型BIO->Select->Epoll多路复用的进化史

做梦都在改BUG

十年程序老狗手写分布式服务架构:原理、设计与实战

小小怪下士

Java 程序员 分布式 后端

Vue3常用代码块

青柚1943

了解5G安全标准,看这一篇就够了

俞凡

安全 网络 通信

Photoshop如何更改语言?最新版PS2023自带中英文语言切换

理理

Photoshop 2023下载 Photoshop 2023破解版 PS2023下载 如何切换PS语言

Spring Boot自动配置原理详解和自定义封装实现starter

做梦都在改BUG

Java Spring Boot 自动配置

阿里内部一份手打524页《Java中高级核心知识》令人犹如醍醐灌顶

程序知音

Java java面试 java架构 后端技术 Java面试八股文

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