10

簡単な紹介: この ASP.NET Webforms サイトには、データベースが 1 つだけではなく、多数あるという特殊性があります。なんで?その場でサイトの新しい「インスタンス」を作成できるからです。すべての「インスタンス」は同じコードベースを共有しますが、独自のデータベースを持っています。これらのデータベースはすべて同じスキーマ (構造) を持っていますが、もちろん異なるデータを持っています。「すべてを 1 つのデータベースに入れ、InstanceId を使用してどれがどれであるかを確認してみませんか」と尋ねないでください。これはビジネス ポリシーの問題だからです。

アプリケーションは、URL によってどのインスタンスが要求されているかを認識しています。これを実現するための追加のデータベースが 1 つあります (設計時にその接続文字列を知っています)。このデータベースには 2 つのテーブルしかなく、URL を「アプリケーション インスタンス」に関連付けます。そしてもちろん、各「アプリケーション インスタンス」には、関連付けられた接続文字列があります。

現在の状況:現在、すべてのインスタンス データベースの同期を維持する (すべてのインスタンス データベースにスキーマの変更を伝達する) 作業を支援するために使用されているものはありません。そのため、手作業で行っていますが、もちろん完全に混乱しています。

質問:スキーマの変更を処理するために rails-migration の方法を使用したいのですが、できればmigratordotnetを使用したいと考えていますが、セットアップが簡単であれば他の方法を使用することもできます。

問題は、migratordotnetが接続文字列をproj.buildファイルで宣言する必要があり、実行時までわからないことです。

本当に役立つのは、最新の移行をすべてのデータベースに適用するApplication_Startで実行される何らかのメソッドです。

これは、 migratordotnetなどでどのように行うことができますか? 他の提案はありがたく歓迎します。

ありがとうございました!

4

4 に答える 4

5

これは古い質問なので、何らかの方法で問題を解決したと思いますが、この質問に出くわした他の人のために解決策を投稿します. MigratorDotNet を MSBuild ターゲットにするのではなく、コードから呼び出すことができます。

public static void MigrateToLastVersion(string provider, string connectionString)
{
    var silentLogger = new Logger(false, new ILogWriter[0]);
    var migrator = new Migrator.Migrator(provider, connectionString, 
                   typeof(YourMigrationAssembly).Assembly, false, silentLogger);
    migrator.MigrateToLastVersion();
}
于 2011-02-21T15:53:46.410 に答える
1

RedGate には、使用できる SQL 比較 SDK があります。これは有望に見えるケーススタディですが、私はそれを使用していないので、経験から何かを伝えることはできません. 試用版をダウンロードして、タイヤを蹴ってください。

于 2010-07-26T13:16:42.430 に答える
1

Mig# を使用して、C# または .NET コードで移行を維持できます: https://github.com/dradovic/MigSharp

于 2011-02-17T14:17:45.630 に答える
0

Fluent-Migrator をチェックしてください。

于 2010-07-15T06:19:29.047 に答える