FluentMigrator未运行迁移

时间:2014-08-27 18:10:58

标签: c# sql-server-2012 fluent-migrator

我继承了一个使用FluentMigrator管理迁移的项目。最初,该项目在应用程序启动时正在执行迁移,但是I.T.我已经打破了这一点,现在我们必须为DBA提供脚本以便我们进行所有数据库更改。

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

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

enter image description here

我正在使用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");
        }
    }
}

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:1)

我在从命令提示符处运行df.columns = [''] * len(df.columns) mask = (df != 0) df2.columns = [''] * len(df2.columns) dfn = df2.mask(mask) 来测试我的第一次迁移以查看其工作原理时遇到了类似的问题。

我发现我的问题是我在SELECT MyTable1.* FROM MyTable1 LEFT JOIN table2 ON table2.ID = 1234 WHERE MyTable1.ID != 1234 AND MyTable1.CompanyName != table2.CompanyName; 类的顶部添加了migrate.exe as documented here

Migrator Tags

当我从命令提示符处运行命令时,我错过了命令中的InitialMigration参数,因此该命令:

[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" 参数。