【问题标题】:How to perform migrations in the package manager?如何在包管理器中执行迁移?
【发布时间】:2018-05-17 02:21:04
【问题描述】:

我安装了 FluentMigration 来管理我的 SQL 文件。

在包管理中我执行以下命令:

PM> dotnet add package FluentMigrator
PM> dotnet add package FluentMigrator.Runner

迁移

 [Migration(201805041513)]
    public class _201805041513_CriacaoTabelaPessoa : ForwardOnlyMigration
    {
        public override void Up()
        {
            Create.Table("Pessoa")
                .InSchema("angularCore")
                .WithColumn("Id").AsInt32().Identity()
                .WithColumn("Nome").AsString(80)
                .WithColumn("SobreNome").AsString(50)
                .WithColumn("Email").AsString(50)
                .WithColumn("IdTpoPessoa").AsInt16()
                .WithColumn("IdEndereco").AsInt16();


        }
    }

进程外(针对某些公司要求)

PM> dotnet tool install -g FluentMigrator.DotNet.Cli

错误:

找不到与“dotnet-tool”命令对应的可执行文件

Documentation

编辑

跑进

PM> dotnet tool install -g FluentMigrator.DotNet.Cli
PM> dotnet fm migrate -p sqlite -c "Data Source=test.db" -a ".\bin\Debug\netcoreapp2.1\test.dll"

生成teste.db

在旧版本中,您直接在数据库中运行迁移,我 不明白如何更新我的数据库,即创建人员 表通过生成的test.db文件?

【问题讨论】:

  • 根据文档,您至少需要为此工具使用 .NET Core 2.1 preview 2 SDK。您使用的是 .NET Core 2.1 预览版 2 吗?我相信您可以通过运行 dotnet --version 进行检查。如果使用 2018 年 4 月 11 日发布的预览版 2,您应该返回 2.1.300-p2
  • @Matt 在包管理中运行:PM> dotnet --version 结果:2.1.103
  • 您需要安装最新的预览版。 dotnet 工具命令是 2.1-preview 2 microsoft.com/net/download/dotnet-core/sdk-2.1.300-preview2 的新增功能
  • @Matt 我能够执行迁移,它不应该在我的数据库中运行吗?
  • 如果您在进程中运行迁移并且没有收到任何错误,则该表应该在那里。如果不存在,则可能无法正确配置服务。请编辑您的帖子以显示您如何配置服务。如果您通过命令行运行 Out Of Process,请同时发布您使用的命令行。我之前的 cmets 是关于 dotnet 工具错误的。

标签: c# visual-studio-2017 fluent-migrator


【解决方案1】:

我能够毫无问题地让它工作。这是我所做的:

首先我安装了.NET Core 2.1-Preview 2。安装后我验证了版本:

dotnet --version
2.1.300-preview2-008533

然后我创建了项目

mkdir testfm
cd testfm
dotnet new console

安装了 nuget 包

dotnet add package FluentMigrator
dotnet add package FluentMigrator.Runner
dotnet add package FluentMigrator.Runner.SQLite
dotnet add package Microsoft.Data.Sqlite

安装了 CLI 工具

dotnet tool install -g FluentMigrator.DotNet.Cli

创建了一个名为 Migration1.cs 的迁移类

     using FluentMigrator;

namespace test
{
    [Migration(201805041513)]
    public class _201805041513_CriacaoTabelaPessoa : ForwardOnlyMigration
    {
        public override void Up()
        {
            Create.Table("Pessoa")
                .InSchema("angularCore")
                .WithColumn("Id").AsInt32().Identity()
                .WithColumn("Nome").AsString(80)
                .WithColumn("SobreNome").AsString(50)
                .WithColumn("Email").AsString(50)
                .WithColumn("IdTpoPessoa").AsInt16()
                .WithColumn("IdEndereco").AsInt16();


        }
    }
}

编译项目

dotnet build

从根项目目录运行迁移

dotnet fm migrate -p sqlite -c "Data Source=test.db" -a ".\bin\Debug\netcoreapp2.1\test.dll"

然后我收到以下消息。

然后我通过查看 SqlLite DB 确认表是创建的

要在 Sql Server 2016 上运行相同的迁移,您需要运行:

dotnet fm migrate -p SqlServer2016 -c “服务器=SQLSERVERINSTANCE;uid=testfm;pwd=test;Trusted_Connection=yes;数据库=FluentMigrator” -a ".\bin\Debug\netcoreapp2.1\test.dll"

【讨论】:

  • 那将如何在本地 mssql 数据库中运行?
  • 这取决于您所针对的 SQL 版本。要获得可用处理器的完整列表,您可以运行“dotnet fm list processor”如果您的目标是 SqlServer 2016,您可以运行类似 'dotnet fm migrate -p SqlServer2016 -c "server=SQLSERVERINSTANCE;uid=testfm;pwd=test 这样的命令;Trusted_Connection=yes;database=FluentMigrator" -a ".\bin\Debug\netcoreapp2.1\test.dll"'
  • 非常感谢,您能在回复中添加一个连接字符串吗?
  • 我已经调整了答案以显示 sql server 2016 的连接字符串/命令
猜你喜欢
  • 2013-06-01
  • 2020-10-20
  • 2011-06-26
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2018-08-14
相关资源
最近更新 更多