Entity Framework 4 のデータベースの移行
-
25-09-2019 - |
質問
私はエンティティからデータベース スクリプトを生成するモデル駆動アプローチを使用して、Entity Framework 4 を試してきました。これは素晴らしいことですが、データベースのバージョン管理に関してこれがどのように機能するかわかりません。アクティブ レコード タイプの移行フレームワークを使用したい場合は、逆の作業を行ってデータベースからエンティティを生成する必要があると思いますか?モデル駆動型アプローチを使用してデータベースを適切にバージョン管理する方法はありますか?
解決
これは、EntityFramework.Migrations という名前の NuGet パッケージとして近々リリースされる予定です。
デモは TechEd 2011 で Scott Hanselman によって実行されました (オンラインで入手可能) http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV349)。関連セクションは 45 分後です。
つまり、パッケージがインストールされたら、パッケージ マネージャー コンソールに次の内容を入力してデータベース変更スクリプトを生成します。
migrate -script
更新 (2011 年 11 月 13 日)
このパッケージのアルファ 3 ビルドは、NuGet で入手できるようになりました。コマンドレットを使用するのではなく migrate -script
前述のように、コマンドレットを使用します Add-Migration <migrationname>
. 。あ その使用方法のウォークスルー ADO.NET チームのブログで見つけることができます。
更新 (2012 年 2 月 14 日)
この機能はメインの一部として利用できるようになりました。 EntityFramework NuGet パッケージ, 、バージョン 4.3 以降。アン 更新されたウォークスルー EF 4.3 の使用方法については、ADO.NET チームのブログを参照してください。
他のヒント
あなたは Wizardby に試すことができます。これは、データベースの移行を管理するためのツールです。それは(それはほぼ不可能なので、この点で、それを統合する)EFとの統合が、仕事をしていませんしません。
ScottGu はこの件について次の記事で言及しています。 ブログの記事:
また、将来的には、データベース スキーマの移行をプログラムで自動化/スクリプト化できる「移行」機能も EF でサポートされる予定です。
[編集]
おそらく彼は、 エンティティ デザイナー データベース生成パワー パック, 、Morteza Manavi が回答したように 別のSOの答え.
さて、あなたはActiveRecordのように動作する必要があります。 :)
あなたは、モデル最初に使用したいが、まだマイグレーションを使用する場合は、しかし、これが可能になりますが、あなたに代わって余分な作業が必要になります。このモデルは、最初のデータベース変更スクリプトを生成します。あなたはだけでなく、手動で元に戻すスクリプトを作成するよう、移行に関連する部分を抽出する必要があります。これは、いくつかの手作業を伴うが、それはひどく難しいとして私を打つません。
私はEF.Migrationsライブラリの代替に取り組んでいます - EntityFramework.SchemaCompare に。これは、物理的にデータベースコンテキストを(EF.Migrationsがそれをしない)を表すエンティティモデルでDBスキーマを比較することができます。これは、データベースの初期化中または手動でリクエストに応じていずれかを焼成することができます。
次の例を考えてみましょう#if DEBUG
Database.SetInitializer(new CheckCompatibilityWithModel<DatabaseContext>());
#endif
非互換性の問題が発見された場合、これは、DBスキーマとモデルとの違いを説明し、データベースの初期化中に例外がスローされます。また、あなたのコード内でこの方法を任意の時点で、それらの違いを見つけることができます。
using (var ctx = new DatabaseContext())
{
var issues = ctx.Database.FindCompatibilityIssues();
}
そして、あなたはどちらかのDBスキーマやモデルを更新することができます手にこれらの違い/非互換性の問題を持っています。
データベース・スキーマとモデルの設計および/または複数のチームメンバーが同じDBスキーマとモデルに取り組んでいるチームで作業を完全に制御する必要がある場合、このアプローチは特に便利です。またEF.Migrationsに加えて使用することができます。
フォーク私のGitHubで: https://github.com/kriasoft/dataする