10

かなり基本的なものが欠けているに違いありません。

私はレガシー プロジェクトに取り組んでおり、FluentMigrator をミックスに取り入れようとしています。なぜなら、このツールを使用することではるかに簡単になると思われるいくつかの興味深いデータベースの変更とデータの移行が近づいているからです。

最初の移行では、データベースを現在の運用バージョンにそのまま移行したいだけです。最初の移行を簡素化するために、SQL Server 2008 データベースをスクリプト化しました。移行では、スクリプト化されたコマンドを一連の SQL コマンドとして実行します。

テストするために、完全に空のデータベースを作成し、これを使用してコマンド ラインから実行してみます。

> migrate -a "C:\My\Project\Path\bin\debug\Rds.MyProjName.DBMigrations.dll" 
-db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2008;Initial Catalog=myNewDbName;
Integrated Security=SSPI" -version=20100901000000

指定されたバージョンは、最初の移行クラスの移行属性のタイムスタンプです。

コマンド ラインでは、すべてが正常に実行されているように見えます。スクリプト全体が拡大表示され、次のように終了します。

-- CreateProductionDbCircaSep2010: migrated

しかし、データベースを見ると、まだ空です。そこには絶対に何もありません。私の Up メソッドは次のようになります。

public override void Up()
{
    var cmds = LoadEmbeddedResources
        .GetEmbeddedResource("scripted_db_2010-09-01.sql")
        .AsString()
        .ParseCommands();

    foreach (var c in cmds) {
        Execute.Sql(c);
    }

    CreateReferenceData();
}

(参考までに、Migrator.Netが死んでいることに気付く前にMigrator.Netを使用して開始したため、スクリプトをそのまま実行するのではなく、スクリプトを解析しています。これはすでにセットアップされていました。)

誰か手を貸してくれませんか?トランザクションがコミットされていないように見えるか、移行にドライランを実行させるコマンドラインオプションがオンになっているように見えますが、表示されません...

編集:私が試した追加事項

接続文字列が期待どおりのデータベースを使用していることを確認するために、データベースの名前を変更したところ、予想どおりログイン エラーが発生しました。

さらにテストするために、スクリプトの長さを短くし、次を使用して実行してみました

public override void Up()
{
    Execute.Script(@"..\Resources\test.sql"); 
}

コマンドごとではなく、同じ結果が得られます。そのテストの出力は次のとおりです(パスなどを編集したことに注意してください):

C:\My\Project\Path\FluentMigrator.Net\ >migrate -a "C:\My\Project\Path\bin\debug
\My.Project.DBMigrations.dll" -db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2
008;Initial Catalog=myNewDbName;Integrated Security=SSPI" -version=2010090100000
0
Using Database SqlServer2008 and Connection String Data Source=.\SQLEXPRESS2008;
Initial Catalog=myNewDbName;Integrated Security=SSPI
-- VersionMigration: migrating ===============================================

-- CreateTable VersionInfo
-- VersionMigration: migrated
-- CreateProductionDbCircaSep2010: migrating =================================

-- ExecuteSqlScript C:\My\Project\Path\FluentMigrator.Net\..\Resources\test.sql
-- CreateProductionDbCircaSep2010: migrated

まだデータベースにテーブルがありません - 期待される VersionInfo テーブルさえありません。

4

4 に答える 4

20

バージョン 0.8 と 1.0 の両方でいくつかの調査とテストを行った結果、これは移行ランナーのトランザクション管理に関連する FluentMigrator.Net のバグであることがわかりました。特定のバージョン番号で移行を実行すると、トランザクションのコミットが呼び出されません。バージョン番号を指定しなくても問題ありません。

編集:

それ以来、私は受け入れられたプロジェクトにパッチを提出しました。これはもはや問題ではありません。

于 2010-11-19T12:54:55.360 に答える
17

これは本当にばかげているように聞こえますが、私はそれに数時間を費やしたので、ここに属します:

移行クラスが公開可視性を使用していることを確認してください。

これがないと、移行は完全に無視されます。

于 2014-01-10T21:27:11.887 に答える