新闻详情

新闻详情

首页 / 资讯中心 / 详情

推荐一个支持自动逆向迁移的 .NET 数据库迁移框架

发布时间:2026/9/9 14:19:53来源:尧图网络
推荐一个支持自动逆向迁移的 .NET 数据库迁移框架
目录FluentMigrator传统数据库开发有哪些问题解决方案多数据库支持快速入门示例执行原生 SQL自动逆向迁移项目地址FluentMigrator推荐一个功能强大的 .NET 数据库迁移框架FluentMigrator 是一个用于 .NET 的迁移框架它允许您以结构化、版本控制的方式管理数据库架构变更。无需手动运行 SQL 脚本而是将迁移编写为可自动执行的 C# 类。传统数据库开发有哪些问题每个开发人员都需要手动运行 SQL 脚本数据库变更没有明确的版本控制。开发、测试和生产环境之间存在不一致的风险难以追踪已应用的更改数据库特定的 SQL无法在不同的驱动之间运行解决方案FluentMigrator 通过以下方式解决这些问题基于代码的迁移 数据库变更使用 C# 和 Fluent API 编写。版本控制 迁移是代码库的一部分可以提交到源代码控制系统中。自动跟踪 FluentMigrator 会跟踪已应用的迁移。数据库无关 一次编写即可在多个数据库驱动上运行回滚支持 定义可逆迁移的向上和向下方法。[Migration(20240101000000)] public class CreateUsersTable : Migration { public override void Up() { Create.Table(Users) .WithColumn(Id).AsInt32().NotNullable().PrimaryKey().Identity() .WithColumn(Username).AsString(50).NotNullable().Unique() .WithColumn(Email).AsString(255).NotNullable() .WithColumn(CreatedAt).AsDateTime().NotNullable().WithDefault(SystemMethods.CurrentDateTime); } public override void Down() { Delete.Table(Users); } }多数据库支持SQL ServerPostgreSQLMySQL / MariaDBSQLiteOracleFirebird 更多数据库支持...只需编写一次迁移代码即可在任何受支持的数据库上运行。快速入门示例通过 Nuget 安装 FluentMigrator 后添加下面的配置到您的项目中。using var serviceProvider new ServiceCollection() .AddFluentMigratorCore() .ConfigureRunner(rb rb .AddSqlServer() .WithGlobalConnectionString(connectionString) .ScanIn(typeof(MyMigration).Assembly).For.All()) .BuildServiceProvider(false); using var scope serviceProvider.CreateScope(); var runner scope.ServiceProvider.GetRequiredServiceIMigrationRunner(); runner.MigrateUp();接下面创建一个新建用户表的迁移类如下using FluentMigrator; [Migration(20240101120000)] public class CreateUsersTable : Migration { public override void Up() { Create.Table(Users) .WithColumn(Id).AsInt32().NotNullable().PrimaryKey().Identity() .WithColumn(Username).AsString(50).NotNullable().Unique() .WithColumn(Email).AsString(255).NotNullable() .WithColumn(FirstName).AsString(100).Nullable() .WithColumn(LastName).AsString(100).Nullable() .WithColumn(IsActive).AsBoolean().NotNullable().WithDefaultValue(true) .WithColumn(CreatedAt).AsDateTime().NotNullable().WithDefault(SystemMethods.CurrentDateTime); } public override void Down() { Delete.Table(Users); } }第三步调用 MigrateUp 开始运行迁移是不是非常简单/// summary /// Update the database /// /summary private static void UpdateDatabase(IServiceProvider serviceProvider) { // Instantiate the runner var runner serviceProvider.GetRequiredServiceIMigrationRunner(); // Execute the migrations runner.MigrateUp(); }执行原生 SQLFluentMigrator 内置了数据库的常见命令比如创建表删除表修改表修改列等, 如下新增表[Migration(1)] public class CreateSimpleTable : Migration { public override void Up() { Create.Table(Users) .WithColumn(Id).AsInt32().NotNullable().PrimaryKey().Identity() .WithColumn(Name).AsString(100).NotNullable() .WithColumn(Email).AsString(255).NotNullable(); } public override void Down() { Delete.Table(Users); } }添加列public class AddColumnsToTable : Migration { public override void Up() { Alter.Table(Users) .AddColumn(Email).AsString(255).Nullable() .AddColumn(CreatedAt).AsDateTime().NotNullable().WithDefaultValue(SystemMethods.CurrentDateTime) .AddColumn(IsActive).AsBoolean().NotNullable().WithDefaultValue(true); } public override void Down() { Delete.Column(Email).FromTable(Users); Delete.Column(CreatedAt).FromTable(Users); Delete.Column(IsActive).FromTable(Users); } }当然在一些复杂场景下常用命令可能满足不了需求这时候就可以使用 FluentMigrator 的原生 SQL它是支持的// Execute a simple SQL statement Execute.Sql(UPDATE Users SET IsActive 1 WHERE CreatedAt 2023-01-01); // Execute with parameter-like syntax (still basic string) Execute.Sql(DELETE FROM TempData WHERE ProcessedAt DATEADD(day, -7, GETDATE()));自动逆向迁移FluentMigrator 通过其自动回滚功能支持自动回滚许多迁移操作。当迁移仅实现了 Up() 方法时FluentMigrator 通常可以自动生成相应的 Down() 操作来撤销更改。看下面的代码public class CreateUserTable : AutoReversingMigration { public override void Up() { // ✅ 自动逆向: 创建表 → 删除表 Create.Table(Users) .WithColumn(Id).AsInt32().NotNullable().PrimaryKey().Identity() .WithColumn(Username).AsString(50).NotNullable() .WithColumn(Email).AsString(255).NotNullable() .WithColumn(CreatedAt).AsDateTime().NotNullable(); } // Down() 方法不需要因为 FluentMigrator 会自动生成: // Delete.Table(Users); }自动逆袭的实现原理是FluentMigrator 会跟踪 Up() 方法中执行的操作并在回滚迁移时自动撤销其中许多操作。此功能可减少样板代码并确保正向迁移和反向迁移之间的一致性。项目地址https://fluentmigrator.github.io引入地址
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

老Mac升级macOS:OpenCore Legacy Patcher实操指南 2026/9/9 14:17:29

老Mac升级macOS:OpenCore Legacy Patcher实操指南

老Mac升级macOS:OpenCore Legacy Patcher实操指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher 是开源补丁工具&#…

阅读更多 →
从符号到物理:AI算法与计算硬件的协同跃迁 2026/9/9 14:17:29

从符号到物理:AI算法与计算硬件的协同跃迁

1. 从符号到物理,AI发展史上的一次坐标系更换做了十多年AI算法和系统优化,我越来越觉得“算法”和“硬件”这两件事从来就不是两条平行线——尤其在深度学习成为主流的这十年,它们之间的关系已经从“各自为政”变成了“深度缠绕”。今天想跟你…

阅读更多 →
t613平台SPI读取Flash ID:从时序到代码的实战解析 2026/9/9 14:17:29

t613平台SPI读取Flash ID:从时序到代码的实战解析

简介:基于Android平台的SPI Flash ID读取工具,面向嵌入式驱动开发与底层调试人员,应用通过SPI总线的ioctl系统调用直接读取Flash芯片识别码,工程代码组织清晰,稍加改造即可扩展为SPI设备的通用读写模块,适用…

阅读更多 →
STM32G474 HRTIM实战:500kHz全桥PWM配置全攻略 2026/9/9 14:17:29

STM32G474 HRTIM实战:500kHz全桥PWM配置全攻略

简介:面向使用STM32F334内置高分辨率定时器(HRTIM)进行PWM输出的开发者,这份仅含两个源文件的精简工程完整演示了HRTIM的实战配置与用法。该定时器最大计数频率高达4.608GHz,时间控制精度可达217ps(0.217ns),特别适合数字电源、高…

阅读更多 →
面试官视角:软件测试简历筛选与优化实战指南 2026/9/9 14:17:29

面试官视角:软件测试简历筛选与优化实战指南

我做了快十年软件测试,面试过的候选人少说也有上千个,筛掉的简历早就过万了。平时总有人在群里问:“投了几十份简历都没有回音,是不是学历不行?”“项目也写了,工具也会用,为什么连面试都约不到…

阅读更多 →
Claude Quickstarts 快速上手指南:30分钟跑通三种 Claude AI 应用 2026/9/9 14:14:28

Claude Quickstarts 快速上手指南:30分钟跑通三种 Claude AI 应用

Claude Quickstarts 快速上手指南:30分钟跑通三种 Claude AI 应用 【免费下载链接】claude-quickstarts A collection of projects designed to help developers quickly get started with building deployable applications using the Claude API 项目地址: http…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞