写点什么

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

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

关注

评论

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

什么是委外管理?委外管理到底有什么用?

积木链小链

数字化转型 智能制造 中小企业 委外管理

PAI Model Gallery 支持云上一键部署 Qwen3 全尺寸模型

阿里云大数据AI技术

人工智能 阿里云 LLM PAI Qwen3

如何用豆包做PPT?PPT自动生成全攻略!

职场工具箱

人工智能 PPT AIGC AI生成PPT 豆包

CRaC 技术深度解析

mazhen

Java Linux Serverless Cloud Native crac

【等保知多少】企业过等保要点看这里!

行云管家

网络安全 等保 等保测评

AI智能体平台的组件和功能

北京木奇移动技术有限公司

AI智能体 软件外包公司 AI技术应用

通义灵码正式上线 Qwen3,编程智能体马上来了!

阿里巴巴云原生

阿里云 云原生 通义灵码 Qwen

最新字节跳动运维云原生面经分享

王中阳Go

Go 字节跳动 面经

详细剖析Java动态线程池的扩容以及缩容操作

电子尖叫食人鱼

Java

25年甘肃省等保测评机构名单汇总

行云管家

等保 等级保护 等保测评

《Operating System Concepts》读后感

codists

操作系统

通义灵码正式上线 Qwen3,编程智能体马上来了!

阿里云云效

阿里云 云原生 通义灵码 Qwen

使用 Amazon Nova Lite 实现多快好省的智能视频审核

亚马逊云科技 (Amazon Web Services)

Nacos 3.0 正式发布:MCP Registry、安全零信任、链接更多生态

阿里巴巴云原生

nacos MCP

影响LED显示屏价格的三大因素

Dylan

产品 LED LED display LED显示屏 LED屏幕

数智报告:一键合并精准高效

用友智能财务

用友 财务 数智化 智能财务 数智报告

4.29 晚直播预告 | 清华团队揭秘,时序大模型如何让数据“活”起来?

Apache IoTDB

全开源、私有化部署!轻量级用户行为分析系统-ClkLog

ClkLog

开源 数据分析 埋点 用户行为分析 用户画像

【京东招聘专场】京东零售&科技诚邀测试开发精英!多地热招中!

测试人

软件测试

宁德新能源:时序数据库 TDengine 支撑百万级工业设备实时数据高效治理

TDengine

数据库 tdengine 时序数据库

时序数据库 TDengine × Perspective:你需要的可视化“加速器”

TDengine

数据库 tdengine 时序数据库

中关村科学城工业软件创新暨开源峰会在海淀成功举办

极客天地

聚焦查询引擎优化:技术人如何在国产数据库项目中不断突破

TDengine

数据库 tdengine 时序数据库

开放注册!RootTalk Sandbox沙盒系统正式上线

乘云数字DataBuff

可观测性 故障定位 Demo 运维监控

京东商品列表 API 接口使用指南

tbapi

京东API接口 京东API 京东商品列表接口 京东商品采集

非凸科技受邀出席AI SPARK活动,共探生成式AI驱动金融新生态

非凸科技

AI智能体平台的搭建

北京木奇移动技术有限公司

AI智能体 软件外包公司 AI技术应用

AI智能体的技术架构

北京木奇移动技术有限公司

AI智能体 软件外包公司 AI技术应用

万界星空科技QMS质量管理系统几大核心功能详解

万界星空科技

万界星空科技 QMS 质量管理系统 生产质量管理 产品质量管理

千亿级打点PV的成本治理实践

百度Geek说

百度 成本治理 打点治理

AI智能体平台的开发流程

北京木奇移动技术有限公司

AI智能体 软件外包公司 AI技术应用

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