C# FluentMigrator未运行迁移

C# FluentMigrator未运行迁移,c#,sql-server-2012,fluent-migrator,C#,Sql Server 2012,Fluent Migrator,我继承了一个使用FluentMigrator管理迁移的项目。最初,当应用程序启动时,该项目正在执行迁移过程,但I.T.对此进行了打击,现在我们必须向DBA提供所有数据库更改的脚本 作为此转换的一部分,我将迁移转移到一个名为migrations的新项目。当我尝试使用命令行工具执行迁移时,它似乎可以工作,但没有对数据库应用迁移。数据库字符串是正确的,因为如果VersionInfo表不存在,则会创建该表 迁移有很多种,但大多数都非常简单。以下是第一个示例: 我正在使用SQL Server 2012和

我继承了一个使用FluentMigrator管理迁移的项目。最初,当应用程序启动时,该项目正在执行迁移过程,但I.T.对此进行了打击,现在我们必须向DBA提供所有数据库更改的脚本

作为此转换的一部分,我将迁移转移到一个名为migrations的新项目。当我尝试使用命令行工具执行迁移时,它似乎可以工作,但没有对数据库应用迁移。数据库字符串是正确的,因为如果VersionInfo表不存在,则会创建该表

迁移有很多种,但大多数都非常简单。以下是第一个示例:

我正在使用SQL Server 2012和FluentMigrator 1.2.1

以下是gunr2171的文本命令行:

.\Packages\FluentMigrator.1.2.1.0\tools\migrate.exe -c "Data Source=.;Integrated Security=True;Initial Catalog=portal_test" -db sqlserver2012 -a .\source\Migrations\bin\Debug\migrations.dll
以及迁移示例:

using System;
using System.Collections.Generic;
using System.Linq;
using FluentMigrator;

namespace Migrations
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores")]
    [Migration(1)]
    public class M001_CreateAccountTable : Migration
    {
        public override void Up()
        {
            Create.Table("Accounts")
                .WithColumn("Id").AsInt32().NotNullable().Identity().Unique()
                .WithColumn("PartnerCode").AsString().Nullable()
                .WithColumn("AccountType").AsInt32().NotNullable()
                .WithColumn("Code").AsString().NotNullable().Unique().PrimaryKey()
                .WithColumn("Name").AsString().NotNullable()
                .WithColumn("PrimaryDomainName").AsString().Nullable()
                .WithColumn("IsFederated").AsBoolean().NotNullable()
                .WithColumn("IsActive").AsBoolean().Nullable().WithDefaultValue(1)
                .WithColumn("FederatedEndpoint").AsString().Nullable()
                .WithColumn("CreatedBy").AsString().NotNullable()
                .WithColumn("CreatedOn").AsDateTime().NotNullable().WithDefaultValue(DateTime.Now)
                .WithColumn("ModifiedBy").AsString().NotNullable()
                .WithColumn("ModifiedOn").AsDateTime().NotNullable().WithDefaultValue(DateTime.Now);
        }

        public override void Down()
        {
            Delete.Table("Accounts");
        }
    }
}

我也得到了同样的结果,结果是其中包含迁移的程序集是使用版本1.x编写的,我使用版本2.x中的Migrate.exe运行它们


使用Migrate.exe与构建迁移DLL时使用的版本相同,这为我解决了这个问题。

我遇到了一个类似的问题,我在命令提示符下运行Migrate.exe来测试我的第一次迁移,看看它是如何工作的

我发现我的问题是在
InitialMigration
类的顶部添加了
Migrator标记

[Tags("Localhost","Development","Test","Production")] // Added these
public class InitialMigration : Migration
{
  // Migration here
}
在命令提示符下运行命令时,我遗漏了命令中的
--tag
参数,因此此命令:

migrate.exe --conn="Server=.;Database=my_db;Trusted_Connection=True;Encrypt=True;Connection Timeout=30;" --provider=SqlServer --assembly="MyMigrations.dll" --task=migrate --output --outputFilename="src\migrated.sql"
应该是这样的:

migrate.exe --conn="Server=.;Database=my_db;Trusted_Connection=True;Encrypt=True;Connection Timeout=30;" --provider=SqlServer --assembly="MyMigrations.dll" --tag="localhost" --task=migrate --output --outputFilename="src\migrated.sql"

注意:第一个脚本中缺少
--tag
参数。

VersionInfo表中是否有以前的迁移?您是否在VisualStudio中以调试(而不是发布)的方式构建迁移dll?您是否了解了这一点?这对我来说很有用。我可以理解,不能向前兼容,但在无法更新时不产生某种错误对我来说似乎是一种疏忽。