6

SQL でデータベースを作成し、Visual Studio 2012 で EDMX を作成しました。POCO (TT) クラスが自動的に作成されました。すべてがうまく見えます。

ここで、テーブルの列名を変更します。EDMX を更新します。XML で EDMX を開くと、すべて問題なく表示されます。

質問1

TT でカスタム ツールを実行した後、新しいプロパティが追加で作成されたことがわかります。

SQL table name : Student

Column name : sName

私のPOCOクラスでは

public int sName{ get; set; }

自動的に作成されました。

ここで、SQL の列名を次のように変更します。

Column name : studentName

私のPOCOクラス

public int sName{ get; set; }

public int studentName{ get; set; }

これはバグですか、それとも修正する必要がありますか?

これを避けるにはどうすればよいですか?

質問2

また、任意の SQL 列のデータ型を変更し、EDMX デザイナーで DB からモデルを更新しても、概念モデルは更新されません。どうすればいいですか?

4

5 に答える 5

37

まず、問題を理解するために知っておくべきことは、EDMXファイルは 3 つの異なるセクションを含む単なる XML ファイルであることです。

  • CSDL: 概念スキーマ定義言語
  • SSDL: ストア スキーマ定義言語
  • MSL: マッピング仕様言語

CSDL には、概念モデルを構成するエンティティと関係が含まれています。SSDL は DB モデルを記述し、MSL は 2 つの間のマッピングです。

「DB からモデルを更新」プロセスは SSDL を更新します (現在の DB スキーマと矛盾するものはすべて変更します)。DB スキーマに新しいものを追加した場合にのみ CSDL を変更します。

概念スキーマは DB スキーマと異なる場合があるため、これは非常に正常な動作です (ドメイン モデルを、明らかに OOP/DDD のベスト プラクティスとして聞こえない DB モデルとまったく同じように見せたい場合を除きます)。

@Peru の場合、解決策は、関連するエンティティ (EDMX 全体ではなく!) を削除してから、「DB からモデルを更新」プロセスを実行することです。

お役に立てれば!

編集:

CSDL ファイルと SSDL ファイルの両方で、DB に加えられた変更を適用できる Visual Studio プラグインである無料ではないツールがあります: Huagati DBML/EDMX Tools。唯一の「無料」の解決策は、更新が必要なエンティティ (またはこのエンティティ内の適切なフィールド) を削除することです。

CSDL は開発者が管理するものであり、DB モデルではなくオブジェクト モデルのように見える必要があることに注意してください。エンティティ間の継承を設定している、または 1 つの DB テーブルを 2 つの EDMX エンティティに分割している場合、「DB からモデルを更新」を実行してもすべてが上書きされるわけではありません。

于 2013-04-25T13:42:09.143 に答える