文章目录
前言
一、关系数据库迁移框架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、首先,创建一个控制台项目。
代码语言:javascript复制dotnet new console --name ConsoleTest
2、添加以下 Nuget 包, 这里我们使用了 SQLite 数据库。
代码语言:javascript复制dotnet add package FluentMigrator
dotnet add package FluentMigrator.Runner
dotnet add package FluentMigrator.Runner.SQLite
dotnet add package Microsoft.Data.Sqlite
3、创建一个迁移类
代码语言:javascript复制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、使用下面的代码,运行迁移
代码语言:javascript复制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);
}
}
/// <summary>
/// 创建迁移服务
/// </summary>
/// <returns></returns>
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);
}
/// <summary>
/// 更新数据库
/// </summary>
/// <param name="serviceProvider"></param>
private static void UpdateDatabase(IServiceProvider serviceProvider)
{
var runner = serviceProvider.GetRequiredService<IMigrationRunner>();
runner.MigrateUp();
}
}
}
运行上面的代码,程序会自动运行迁移,创建指定的 Log 表。
5、回滚迁移
代码语言:javascript复制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);
}
}
/// <summary>
/// 创建迁移服务
/// </summary>
/// <returns></returns>
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);
}
/// <summary>
/// 更新数据库
/// </summary>
/// <param name="serviceProvider"></param>
private static void UpdateDatabase(IServiceProvider serviceProvider)
{
var runner = serviceProvider.GetRequiredService<IMigrationRunner>();
//runner.MigrateUp();
//回滚迁移
runner.Rollback(1);
}
}
}
6、进程外执行迁移
安卓包
代码语言:javascript复制dotnet tool install -g fluentmigrator.dotnet.cli
迁移命令
代码语言:javascript复制dotnet fm migrate -p 数据库类型 -c "连接字符串" -a "迁移类的程序集路径"
其他命令 command 可选值为down/up, 如果不指定,默认是up, 即运行所有还未运行过的数据库迁移类
总结
FluentMigrator 的主要优点在于它的易用性和灵活性。它的语法简洁明了,能够让开发人员快速编写数据库迁移脚本。此外,FluentMigrator 还支持在迁移过程中执行多种操作,包括创建表、添加字段、修改表结构等。
总之,FluentMigrator 是一款优秀的数据库迁移工具,能够为开发人员提供简洁、灵活的方式来管理数据库迁移。