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

举报
愚公搬代码 发表于 2022/12/30 23:13:11 2022/12/30
【摘要】 前言Fluent Migrator是一个.NET迁移框架。迁移是一种改变数据库模式的结构化方法,是创建大量sql脚本的一种替代方法,每个开发人员都必须手动运行这些脚本。它提供了一个简洁的 Fluent API,可以让你使用 C# 写出简洁的迁移脚本,轻松地管理数据库迁移,这对于敏捷开发项目特别有用。比如,当开发团队的成员对数据库做出更改时,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 FluentMigrator

dotnet add package FluentMigrator.Runner

dotnet add package FluentMigrator.Runner.SQLite

dotnet 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);
            }
        }

        /// <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、回滚迁移

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、进程外执行迁移

安卓包

dotnet tool install -g fluentmigrator.dotnet.cli

迁移命令

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

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

总结

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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。