完全なデータベース移行スタックの設計
質問
開発中は、Entity Framework 4.3の移行のようなフレームワークのアイデアが好きです(ただし、移行クラスではなくSQLスクリプトで作業する必要がありますが)すべての開発者データベースを最新の状態に保ちます。誰かが最新のソースを取得するためのアップデートを行い、アプリケーションを実行しようとし、それらがデータベースを最新の移行に更新する必要がある(または移行が自動的に行われている)というエラーを取得します。移行ファイルはタイムスタンプされているので、DEVは2つのファイルの名前の命名またはファイルが実行される必要があるシーケンスを命名することを心配する必要はありません。
WebDeployデプロイメントパッケージを構築する準備をするときは、プロダクションデータベースを最新のDBバージョンに移動するために必要なスクリプトを含めることができます。したがって、MSBuildまたはWebDeployは、どのスクリプトをパッケージ化する必要があるかについて決定を下す必要があります。デプロイメントの場合、アプリケーションはEFが提供するもののように自分自身を更新しようとしたくありません。パッケージをIT部門に手渡すか、展開サーバーを介して自動展開を行いたいです。
私の質問のいくつかは次のとおりです。
-
EF 4.3は、DBマイグレーションクラスの代わりにSQLスクリプトで動作することができます(私はすでに私のORMのためにそれを使用しているので、それがそれがそれができるならばいいでしょう)?
-
MSBuildまたはWebデプイはデータベースの移行の概念を理解していますか(例えば、EFを認識しています。4.3 MigrationHistory Table)、または実行する必要があるスクリプトを確実にしてください。最新の移行からDB?どのスクリプトを模索するべきかを手動で決定することは私がやりたいものではありません。マイグレーションを理解しているMS WebDeploy拡張機能はありますか?
-
私の懸念とアイデアは有効ですか?私は本当に知りません。
解決
あなたの懸念が有効であると思います。開発者マシンを同期させると開発中に何でもします。展開するときは、より多くの制御が必要です。
プロジェクトでは、すべてのデータベースが同じ手順で同じ順序で移行されるように、コードベースの移行のみを使用することを決定しました。自動移行とDBの作成は、DBが存在し、有効なチェックのみを確認するカスタム初期化戦略によって無効になります。
私は
他のヒント
-
SQLメソッドを呼び出して、クラス内のSQLを実行するか、update-databaseコマンドを使用して-scriptパラメータを使用して移行からSQLを生成できます。
-
いいえ。彼らはWebデプイイのサポートを追加することを見ていましたが、明らかにRTMの前にそれに反対しました。しかし、彼らはあなたがどちらかから呼び出すことができるコマンドラインアプリ(そして明らかにPowerShellスクリプト)をリリースしました。
プロジェクトで実行するのは、アプリケーションにスタートアップモジュールを作成し、自動的にデプロイされていない移行を実行します - コードによるアプリケーションの起動時のEF移行のトリガー。それは完璧ではありません、開発者はdbを変更する前に最新のものを取得した後にアプリを実行しなければなりませんが、最新と展開の両方で機能します。