2012-03-19 8 views
5

DAC Fxと宣言的データベース開発を活用することに興奮しています。私の主な障害は、スキーマの異なるバージョン間で複雑なデータ移行を処理する方法です。旧世界では、すべてのアップグレードスクリプトを順番に実行するだけで、スキーマがデータ移行時に正しい状態にあることが保証されます。アップグレードパスが動的である場合、これはどのように機能しますか?データ層アプリケーションフレームワーク(DAC Fx)での複雑なデータ移行

例えば、既存のインスタンス上で私のスキーマ(DACPAC1-4)の複数のバージョンが存在すると仮定します

  • DACPAC1:にtableAが存在し、DACPAC2
  • 貴重なクライアントデータがありますにtableAは非推奨と置き換えられているがtableBと正規化されたtableC。新しい 提出
    • ポストデプロイスクリプトを追加します。新しいTABLEBと TABLECまでにtableAからデータを移動させます。 tableAをドロップ
  • DACPAC3:TABLECは新しい、NULL可能COLUMNX
    • ポストデプロイスクリプトがありますtableC.columnXは
    非NULL可能である:提出
  • DACPAC4に基づいてNULL可能列を移入

    DACPAC1-3サーバーを最新のDACPAC4にアップグレードする必要がある場合は、どのDACPACが現在ターゲットになっているかを検出するのに十分な方法で、展開前および展開後のスクリプトを作成する必要がありますデータ移行手順を正しく処理します。さらに、私が最初に書いた素敵な配備後スクリプトは、スキーマの中間バージョンに依存しているので、単純に再利用することはできません。

    アドバイスを事前にいただきありがとうございます!

  • 答えて

    0

    私は一般的にやっていることは以下の通りです:

    1. SchemaVersionを呼ばれるプロパティを含むシステムテーブルを作成します。すべてのアップグレードスクリプトは、最初に現在のバージョンをチェックし、その内容を実行するかどうかを決定するようにプログラムされています。実行後、SchemaVersionはスクリプトに格納されている最新バージョンに設定されます。

    2. また、通常、MinAppVersion(現在のスキーマと互換性のある最小バージョン)という別のプロパティも含まれています。アプリケーションがデータベースに接続しようとすると、現在のアセンブリバージョンとデータベースに格納されているMinAppVersionが比較されます。バージョンがMinAppVersion以上の場合は接続が確立され、そうでない場合は例外がスローされます。

    これが役立ちます。親切に感謝、

    関連する問題