私は最近、Entity Framework 4.1 Code Firstでプログラミングしていて、開発にそれを愛用していますが、最終計画と急速に変化する機能リストだけで、アプリケーションのニーズを満たすようにクラス/データベースを常に変更しています。
開発中、ライブデータはなく、データベース全体を簡単に削除できるため、新しいスキーマで再作成されますが、ライブの場合は明らかに、これは非常に悪いです!
私が見ることができる唯一の解決策は、メタデータテーブルを削除して手動でデータベースの同期を維持するか、基本的に削除して再シードすることです。
データを再作成して移行するよりも列/テーブルを追加する方がはるかに簡単だと思うので、私は個人的に最初の方法を好みますが、何かを見落とさない限り、これは完全にコードファーストから移行しています。
ですから、問題は、コードファーストは初期の開発についてだけであり、運用環境のEFを管理するための優れた戦略とは何かということです。
私の意見では、コードファーストの自動データベース作成は開発専用です。 Stack Overflowで同様の質問に回答しましたが、データベースをアップグレードする方法と、本番環境で自動機能が悪い理由の両方を説明しました。
データベースのアップグレードは半手動タスクです。テストされていない自動マジックが背後にあるはずはありません。さらに、EF 4.1には現在、そのようなマジックはありません(ADO.NETチームが取り組んでいる機能については 一部のプレゼンテーション しかありません)。
この質問 をチェックして、Webサイトがどのようにアップグレードされるかをよりよく理解することもできます。
アップグレードスクリプトを維持する。
データベース自体で、スキーマのversionでレコードが保持されるテーブルを維持します。
アプリケーションを起動すると、バイナリで使用されるはずのバージョンに対してバージョンが検出されます。異なる場合は、アップグレードスクリプトを実行(またはユーザーに要求)します。
最初にデータベースをバックアップすることを忘れないでください。
この問題は、プログラミングモデルと何も存在しないランタイム環境との間を接続するという点で、どういうわけか欠陥があります。
最初のコードは、主に開発速度のドライバーであり、実際にはランタイムシステムに接続されていません。
本番環境では、ランタイムがdbモデルを削除/更新する可能性を否定する構成設定が適切に行われます。