12

FluentMigrator を使用して移行を管理するプロジェクトを継承しました。当初、プロジェクトはアプリケーションの起動時に移行をインプロセスで実行していましたが、IT 部門がそれを取り締まり、現在はデータベースのすべての変更についてスクリプトを 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");
        }
    }
}
4

2 に答える 2

9

私は同じことをしていましたが、移行を含むアセンブリがバージョン 1.x を使用して記述されており、バージョン 2.x の Migrate.exe でそれらを実行していたことが判明しました。

移行DLLのビルドに使用されたのと同じバージョンでMigrate.exeを使用すると、解決しました。

于 2015-04-23T19:42:17.310 に答える
1

migrate.exeコマンド プロンプトから を実行して最初の移行をテストし、それがどのように機能するかを確認するという同様の問題がありました。

私の問題は、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"

これである必要があります:

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最初のスクリプトにはパラメーターがありません。

于 2018-07-09T05:46:15.023 に答える