8

基本的に、スキーマが変更されたSQLServerデータベースがあります。この場合、EFデータモデルを更新する必要があります。これは、テーブルを追加または削除するだけの場合は問題ありません。デザイナに移動し、存在する複数の場所の1つから「データベースからモデルを更新...」を見つけて、ウィザードを実行します。

残念ながら、ウィザードではデータベースからモデル全体を置き換えるだけではありません。また、一度に1つのことしか実行できません。したがって、複数のスキーマ変更を行うという不幸な決定を下した場合、さらに悪いことに、私が行ったことを忘れてください。モデルからテーブルを追加、更新、および削除する複数の手順を実行する必要があります。

これは明らかに面倒です。したがって、より良い手順がないため、モデルを吹き飛ばして、データベースからモデルを再作成するすべての手順を実行する必要があります。クラップ:接続文字列を構成ファイルに残しました。これを削除してウィザードを最初からやり直す必要があります。そうしないと、同じエンティティクラス名が生成されず、すべてのコードが壊れてしまいます。

なぜこれでモデルを吹き飛ばしてデータベースから生成できないのですか?さらに重要なことに、なぜ他の誰もこの質問をしなかったのですか?人々は何をしていますか?

4

3 に答える 3

4

モデルを吹き飛ばして交換したい場合、最も簡単な組み込みの方法は、モデルを削除して再作成することです。ただし、モデルをカスタマイズした場合は、もちろんそれも失われます。

回避策として、継続的な増分スキーマ変更(および両端に適用される変更)を可能にするために、データベースをEFモデルのSSDLレイヤーと比較し、SSDLをCSDLレイヤーと比較し、差分を表示して個別に許可するユーティリティを作成しました(またはすべて)同期する違い。

ここに画像の説明を入力してください

ここで実際の動作を確認できます:http ://www.youtube.com/watch?v = doqYOlcEAZM ...試してみたい場合は、http://huagati.com/edmxtools/からダウンロードできます。

于 2012-02-25T02:29:07.353 に答える
1

コマンドラインを介してそれを行うcmd-scriptを書くことができます:

http://msdn.microsoft.com/en-us/library/bb896270.aspx

于 2012-02-24T23:12:25.723 に答える
0

2つの要件が矛盾しています。モデル全体を爆破したいが、同時にカスタマイズを維持したい。最初の状況はLinq-to-Sqlデザイナーで可能でしたが、モデルを更新するたびにすべての変更が失われました。EF Designerの場合、MSは、デザイナーがCSDLスペース(エンティティ)に既に存在するものに触れることはほとんどなく、ストレージモデルのみを変更するという、2番目のアプローチを使用することを決定しました。私は両方のデザイナーを使用しましたが、2番目のアプローチの生産性と使いやすさははるかに優れていると言わざるを得ません。それはまた人々が通常これについて不平を言わない理由です。

不平を言う人は通常次のいずれかを行います。

  • MSがさまざまなレベルの粒度で変更をマージすることに関連するものを完全にスキップし、近い将来に改善されないため、いくつかのツール(@Kristoferによって参照される優れたツールなど)を購入します
  • モデル全体を削除するたびにすべての変更を元に戻すスクリプトまたはカスタムツールを作成します(これは、Linq-to-sqlで使用した方法です)。
  • Designerを使用せず、XMLを手動で保守する
  • EDMXの代わりにコードマッピングに移動します
于 2012-02-26T13:26:11.830 に答える