14

私にとってより論理的に理にかなっているので、モデルファーストアプローチを採用したシステムをセットアップしました。今、私でさえモデルにいくつかの変更があるとき、現在私がしていることは-

  1. エンティティフレームワークのモデル機能からデータベースを生成を使用します。ダミーデータベースを作成し、それらのスクリプトを適用します。これにより、最初にすべてのデータとテーブルが削除され、次にエンティティフレームワークによって生成された最新のSQLファイルでデータベースが更新されます。
  2. ここで、Visual Studioのスキーマ比較機能を使用して、ローカルデータベースと本番データベースの移行スクリプトを生成します。
  3. スクリプトを手動で調べて確認します。それが完了したら、本番インスタンスで移行スクリプトを実行します。

質問:主な問題は、それが本当に面倒であり、ローカルシステムから行うため、prodデータベースへの接続が非常に遅く、ビジュアルスタジオもクラッシュすることがあるということです。これを行うためのよりクリーンなアプローチはありますか?私のラップトップが本番インスタンスでのデータベースの移行を実際に担当しないように、より自動化されているのはどれですか?

4

2 に答える 2

5

Database Migration Power Packを試すことができます。完全なデータベーススクリプトの代わりに変更スクリプトを作成できますが、その背後では、手動で行ったのと同じ手順を実行します。問題は、前述のツールがEF5では機能しないことです

残念ながら、EF移行は現在、EDMXを介して作成されたモデルをサポートしていません。現時点では、移行はコードファーストアプローチのみをサポートしています。

于 2012-08-12T08:08:48.443 に答える
3

スキーマファーストの設計では、ApexSQL Diffを使用します(RedGateの製品と非常によく似ており、おそらく少し安価です)。優れたサードパーティツールは、VSデータベースプロジェクトよりもはるかに使いやすく、スクリプトアプリケーションツールで簡単に適用できます。 RoundHousEのように。

Model Firstアプローチで使用すると、投稿で説明されているように、Model‑Schema‑Diff‑Schema‑Modelのサイクルを使用したSchemaFirstアプローチに従うことができます。合理化されたプロセスを作成するために、以下のこれらのガイドライン/注記を検討してください。スキーマ差分アプローチは、面倒な、遅い、または過度に手動である必要はありません。

  1. データベーススキーマの現在のバージョンは、一連のデータベースパッチ(またはDDL / DMLスクリプト)を適用することによって取得されます。

    ツール(RoundHousEを使用)は、必要に応じてスクリプトを自動的に適用します。どのスクリプトが適用されたかを知るための情報を記録します。同じスクリプトを適用することはべき等です。

  2. ローカルデータベースに対して行われた差分。このローカルデータベースは、以前のすべての変更スクリプトから自動化された方法で構築できます。このlatest-localは、常に最新のモデル変更の差分ターゲットです。

    リモート/ライブデータベースがdiffターゲットとして使用されることはありません。同じスクリプトを後でテスト(そしてライブ)データベースに適用できます。すべてが同じ方法で行われるため、このプロセスはすべてのデータベースで繰り返すことができます。

    唯一の「問題」は、よく考えられていない更新が、新しい制限/制約の下で無効なデータにつながる可能性があることです。もちろん、これはライブデータベースにプッシュする前に、簡単に識別、修正、および再差分できました。

  3. diffがソース管理にコミットされたら、ブランチに適用する必要があります。以前にコミットした変更スクリプトを「元に戻す」には、逆のアクションを適用して新しい差分を作成する必要があります。暗黙のダウンバージョンはありません。

    統合する必要のあるスキーマロックとして効果的に機能する[Hg]モデルブランチがあります。これは弱点と見なすことができますが、小規模チームの開発ではうまく機能しています。

  4. Huagati DBML / EDMXのようなツールを使用して、スキーマをモデルに同期し直します。これは、開発時に非常に役立ちます。この小さな宝石は本当にそれ自体の代償を払っており、サイクルの一部です。これを使用すると、「モデルに更新」したり、SSMS(またはその他)でスキーマを変更してから元に戻したりすることも簡単にできます。

コードファーストの移行は「OK」です(そして間違いなく何もしないよりはましです!)が、さまざまなsys情報を公開していないため、Azure SQL(別名SQLデータベース)が高度な差分ツールでサポートされていないため、私はそれらを使用しています。(diffは通常どおりローカルで実行できますが、ApexSQLDiffはAzureSQLと常に相性が良いとは限らないDDL/ DMLを生成します-さらに、少し異なるアプローチを学ぶチャンスです:-)

PowerPackを介したCodeFirst移行のいくつかの利点:DDL / DMLに制限される代わりにC#で更新タスクを実行でき(便利な場合があります)、自動ダウングレード(使用には疑問があります)、サードパーティを購入する必要はありませんツール(高価になる可能性があります)、Azure SQLへの統合/展開が容易、特定のデータベースベンダーとの結びつきが少ない(理論上)など。

コードファーストの移行(およびそのような自動化)は、絶対に恐ろしいドロップアンドリクリエイトアプローチと比較して良い一歩ですが、開発時には専用のSQLツールを使用することをお勧めします。

于 2013-07-14T01:05:22.393 に答える