尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
推荐一个支持自动逆向迁移的 .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

相关推荐

Windows 11彻底清理360残留文件的4种方法

Windows 11彻底清理360残留文件的4种方法

1. Windows 11卸载360后残留文件清理难题解析去年给公司批量部署新机时,我遇到了一个棘手问题:十几台预装360安全卫士的Windows 11电脑在卸载后,Program Files目录下顽固残留着WinTools和SoftMgr文件夹。右键删除时系统提示"文件正在使用…

📅 2026/8/21 3:40:51
Log Parser 2.2 实战:5分钟定位Windows服务器暴力破解攻击源

Log Parser 2.2 实战:5分钟定位Windows服务器暴力破解攻击源

Log Parser 2.2 实战:5分钟定位Windows服务器暴力破解攻击源Windows服务器安全日志就像一座未经开采的金矿,蕴藏着大量关键安全信息。当服务器遭遇暴力破解攻击时,如何快速从海量日志中定位攻击源?本文将带你用Log Parser 2.2这把…

📅 2026/8/21 3:40:56
Windows 10 注册表深度清理:定位并删除5类流氓软件残留项

Windows 10 注册表深度清理:定位并删除5类流氓软件残留项

Windows 10 注册表深度清理:定位并删除5类流氓软件残留项当你的电脑频繁弹出广告、浏览器主页被篡改,或是莫名其妙安装了陌生软件时,常规的卸载和杀毒可能已经无法彻底解决问题。这些顽固的流氓软件往往在注册表中留下了难以察觉的"后门…

📅 2026/9/8 9:31:00
MORE NEWS

更多资讯

📰

TensorRT插件开发:原理、实现与性能优化

1. TensorRT插件机制深度解析在深度学习推理加速领域,TensorRT的插件系统是其最具扩展性的功能之一。作为NVIDIA官方推出的高性能推理框架,TensorRT通过插件机制解决了框架原生算子支持不足的问题。我在实际部署YOLOv5/v7等模型时发现,当遇到…

📰

系统部署与软件安装作业标准化实践指南

1. 作业安装的基本概念与场景"安装的作业"这个表述在技术领域通常指代系统部署、软件安装或环境配置相关的任务流程。不同于简单的双击安装包操作,这类作业往往涉及多个环节的串联执行,需要处理依赖关系、权限配置、环境变量设置等复杂问题。在…

📰

2026年职业资格考试新变化与备考指南

1. 2026年度职业资格考试计划概览根据最新发布的2026年度专业技术人员职业资格考试工作计划,本年度考试安排呈现出三个显著特点:一是考试项目覆盖领域更广,新增了数字经济、碳资产管理等新兴职业资格认证;二是考试时间分布更加合理…

📰

Simulink与CarSim联合仿真在车辆动力学中的应用

1. 项目概述 在车辆动力学仿真领域,Simulink与CarSim的联合仿真方案已经成为行业标准实践。这个项目聚焦于三个关键技术点:三自由度车辆动力学模型构建、误差跟踪系统开发以及纵向滑移刚度特性分析。作为从业十余年的工程师,我发现这种联合仿…

📰

Python配置管理利器PyNomadic详解

1. Python配置管理的痛点与解决方案 在Python项目开发中,配置文件管理一直是个令人头疼的问题。传统方式下,我们通常使用JSON、YAML或INI文件来存储配置,然后在代码中手动加载和解析。这种方式在小项目中尚可应付,但随着项目规模扩…

📰

履带式机器人远程控制系统设计与ROS应用实践

1. 项目概述:履带式机器人远程控制系统的设计挑战 履带式机器人作为特种移动平台,在复杂地形作业、灾害救援、工业巡检等领域具有独特优势。我最近完成了一套完整的远程控制履带机器人三维设计图纸,这套方案解决了传统轮式机器人在非结构化环…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬