質問: ターゲットデータベーススキーマがEntity Frameworkの内容に準拠していることを確認しますか? 私たちは、データベースの人たちが、ジュノーを使用してスクリプトを変更し、コードベースでアウトオブバンドのアプリケーションデータベースにスクリプトを書き込むプロセスを持っています。彼らは、新しい列がnullで、既存のデータを消去しないことを考慮に入れていますが、時には完全には伝達されない列の名前変更があります。そこで、テストサーバー上のデータベーススキーマをいくつか変更し、それらの変更に対応するようにEntity Frameworkを更新し、コードをコミットします。このプロセスは大丈夫ですが、展開する時期は*除いて*です。 適切なサーバーに成功したビルドを展開するためにTFSをセットアップしましたが、その環境のデータベースが更新されたという保証はありません。私たちは余分なフィールド/テーブル/ビュー/等が気にしません。ターゲットデータベースに存在しますが、EFが認識しているすべてのデータベースがデータベースに格納されていることを確認するために、ビルドを変更する必要があります。 私はこの質問がありますが、私はスキーマが正確に一致する必要はありません。さらに、データベースを直接作成または変更することは望ましくありません。そして、この質問は同様の理想を達成しようとしていますが、まだ達成しようとしているものではありません。 EFのバージョンがターゲットスキーマと連動することを確認するための統合テストが必要です。
回答: 私はなぜデータベースを変更せずにアプリケーションを展開しようとしたのだろうかと思います。アプリケーションはデータベースに依存しているため、デプロイメントは常にデータベースの後に行う必要があります。間違ったデプロイメントプロセス(プロセス自体の修正が正しい解決策である)を修正するための検証を開発するために多くの時間を費やすように見えます。 とにかくデータベースの「検証」を作成することはできますが、時間がかかります。 EDMXファイルを使用している場合は、XMLとして開き、 SSDL 期待されるテーブル、列、リレーション、ビュー(SELECT SQLクエリの形式)、ストアドプロシージャ、および関数をすべて記述する部分。このXMLパーツを解析し、システムデータベースビュー( `sys.tables` 、 `sys.columns` など)を使用して、これらのオブジェクトがデータベースに存在するかどうかを照会することができます。 もう1つのアプローチは、データベースdiffを使用することです。ツールを使用して、現在のテストデータベースとターゲットデータベースを比較します。これには、コマンドラインから実行できるツールが必要となり、その変更を突き止めるために出力を解析する必要があります。