2011-11-11 4 views
5

私たちは、データベースの人たちが、コードベースでアウトオブバンドでアプリケーションのデータベースに変更を加え(そしてジュノーを使ってバージョンを変更する)プロセスを持っています。彼らは、新しい列がnullで、既存のデータを消去しないことを考慮に入れていますが、時には完全には伝達されない列の名前変更があります。そこで、テストサーバー上のデータベーススキーマをいくつか変更し、それらの変更に対応するようにEntity Frameworkを更新し、コードをコミットします。このプロセスは正常に動作します。の場合は、を除いて展開してください。対象のデータベーススキーマがEntity Frameworkの内容に準拠していることを確認しますか?

成功したビルドを適切なサーバーに展開するようにTFSが設定されていますが、その環境のデータベースが更新されているという保証はありません。私たちは余分なフィールド/テーブル/ビュー/等が気にしません。ターゲットデータベースに存在しますが、EFが認識しているすべてのデータベースがデータベースに格納されていることを確認するために、ビルドを変更する必要があります。

私はthis questionを見ましたが、正確に一致させるためにスキーマは必要ありません。さらに、データベースを直接作成または変更することは望ましくありません。 this questionは同様の理想を達成しようとしているようですが、まだ達成しようとしているものではありません。 EFのバージョンがターゲットスキーマと連動することを確認するための統合テストが必要です。

答えて

1

データベースを変更せずにアプリケーションを展開しようとする理由がわかりません。アプリケーションはデータベースに依存しているため、デプロイメントは常にデータベースの後に行う必要があります。間違った展開プロセス(プロセス自体を修正することが正しい解決策である)を修正するための検証を開発するために多くの時間を費やすように見えます。

とにかくデータベースの「検証」を作成できますが、時間がかかります。 EDMXファイルを使用している場合は、XMLとして開き、すべての期待されるテーブル、列、リレーション、ビュー(SELECT SQLクエリの形式)、ストアドプロシージャおよび関数を記述するSSDL部分を読み込むことができます。このXMLパーツを解析し、システムデータベースビュー(sys.tablessys.columns、...)を使用して、これらのオブジェクトがデータベースに存在するかどうかを照会することができます。

もう1つのアプローチは、データベース差分を使用することです。ツールを使用して、現在のテストデータベースとターゲットデータベースを比較します。これには、コマンドラインから実行できるツールが必要となり、その変更を突き止めるために出力を解析する必要があります。

+1

私はデプロイメントプロセスについて完全に同意しますが、データベース担当者は、データベースアップグレードのスクリプトを完全に自動化するために、まだJuneauを通じて生成されたデプロイメントスクリプトを信頼しません。したがって、誰も対象のデータベースを手動で変更しなかったか、アップグレードされたスクリプトを部分的にしか適用しなかったことを確認する必要があります。 –

関連する問題