前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年12月 数据库-关系数据库迁移框架FluentMigrator的使用

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

作者头像
愚公搬代码
发布2022-12-15 14:30:39
6190
发布2022-12-15 14:30:39
举报
文章被收录于专栏:历史专栏历史专栏

文章目录

前言

一、关系数据库迁移框架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 是一款优秀的数据库迁移工具,能够为开发人员提供简洁、灵活的方式来管理数据库迁移。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档