【愚公系列】2022年12月 数据库-关系数据库迁移框架FluentMigrator的使用

文章目录

  • 前言
  • 一、关系数据库迁移框架FluentMigrator的使用
  • 总结


前言

Fluent Migrator是一个.NET迁移框架。迁移是一种改变数据库模式的结构化方法,是创建大量sql脚本的一种替代方法,每个开发人员都必须手动运行这些脚本。它提供了一个简洁的 Fluent API,可以让你使用 C# 写出简洁的迁移脚本,轻松地管理数据库迁移,这对于敏捷开发项目特别有用。比如,当开发团队的成员对数据库做出更改时,FluentMigrator 可以自动检测并应用这些更改,从而确保数据库保持一致性。。

FluentMigrator 提供了一系列的 API 用来创建和管理数据库迁移,并且支持多种不同的数据库系统,包括 MySQL、PostgreSQL 和 SQL Server 等。

FluentMigrator官网网址:https://github.com/fluentmigrator/fluentmigrator
在这里插入图片描述

文档地址:https://fluentmigrator.github.io/
在这里插入图片描述

一、关系数据库迁移框架FluentMigrator的使用

1、首先,创建一个控制台项目。

dotnet new console --name ConsoleTest

2、添加以下 Nuget 包, 这里我们使用了 SQLite 数据库。

dotnet add package FluentMigratordotnet add package FluentMigrator.Runnerdotnet add package FluentMigrator.Runner.SQLitedotnet add package Microsoft.Data.Sqlite

在这里插入图片描述
3、创建一个迁移类

using FluentMigrator;namespace ConsoleTest
{[Migration(20221214121800)]public class AddLogTable : Migration{public override void Up(){Create.Table("Log").WithColumn("Id").AsInt64().PrimaryKey().Identity().WithColumn("Text").AsString();}public override void Down(){Delete.Table("Log");}}
}

在这里插入图片描述

4、使用下面的代码,运行迁移

using FluentMigrator.Runner;using Microsoft.Extensions.DependencyInjection;namespace ConsoleTest
{class Program{static void Main(string[] args){var serviceProvider = CreateServices();using (var scope = serviceProvider.CreateScope()){UpdateDatabase(scope.ServiceProvider);}}/// /// 创建迁移服务/// /// private static IServiceProvider CreateServices(){return new ServiceCollection().AddFluentMigratorCore().ConfigureRunner(rb => rb.AddSQLite()//可以换成其他数据库.WithGlobalConnectionString("Data Source=test.db").ScanIn(typeof(AddLogTable).Assembly).For.Migrations()).AddLogging(lb => lb.AddFluentMigratorConsole()).BuildServiceProvider(false);}/// /// 更新数据库/// /// private static void UpdateDatabase(IServiceProvider serviceProvider){var runner = serviceProvider.GetRequiredService<IMigrationRunner>();runner.MigrateUp();}}
}

在这里插入图片描述

运行上面的代码,程序会自动运行迁移,创建指定的 Log 表。
在这里插入图片描述
5、回滚迁移

using FluentMigrator.Runner;using Microsoft.Extensions.DependencyInjection;namespace ConsoleTest
{class Program{static void Main(string[] args){var serviceProvider = CreateServices();using (var scope = serviceProvider.CreateScope()){UpdateDatabase(scope.ServiceProvider);}}/// /// 创建迁移服务/// /// private static IServiceProvider CreateServices(){return new ServiceCollection().AddFluentMigratorCore().ConfigureRunner(rb => rb.AddSQLite()//可以换成其他数据库.WithGlobalConnectionString("Data Source=test.db").ScanIn(typeof(AddLogTable).Assembly).For.Migrations()).AddLogging(lb => lb.AddFluentMigratorConsole()).BuildServiceProvider(false);}/// /// 更新数据库/// /// private static void UpdateDatabase(IServiceProvider serviceProvider){var runner = serviceProvider.GetRequiredService<IMigrationRunner>();//runner.MigrateUp();//回滚迁移runner.Rollback(1);}}
}

在这里插入图片描述

6、进程外执行迁移

安卓包

dotnet tool install -g fluentmigrator.dotnet.cli

迁移命令

dotnet fm migrate -p 数据库类型 -c  "连接字符串" -a "迁移类的程序集路径" 

其他命令 command 可选值为down/up, 如果不指定,默认是up, 即运行所有还未运行过的数据库迁移类

总结

FluentMigrator 的主要优点在于它的易用性和灵活性。它的语法简洁明了,能够让开发人员快速编写数据库迁移脚本。此外,FluentMigrator 还支持在迁移过程中执行多种操作,包括创建表、添加字段、修改表结构等。

总之,FluentMigrator 是一款优秀的数据库迁移工具,能够为开发人员提供简洁、灵活的方式来管理数据库迁移。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部