2013-03-21 9 views
5

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

ここで、テーブルの列名を変更します。私はEDMXを更新します。 EDMXをXMLで開くとすべてがうまく見えます。

質問1

私はTTでのカスタムツールを実行した後、私は例えば、新しいプロパティを追加作成してしまったことを参照してください。

SQL table name : Student 

Column name : sName 

が私のPOCOクラスで

public int sName{ get; set; } 

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

は今、私は

Column name : studentName 

マイPOCOクラス

public int sName{ get; set; } 

public int studentName{ get; set; } 

これはバグですにSQLの列名を変更したり、私はこの問題を解決するために何かをする必要がありますか?

これを避けるにはどうすればよいですか?私は、任意のSQL列のデータ型を変更し、私のEDMXデザイナでDBからモデルを更新した場合

質問2

はまた、概念モデルは更新されません。これについてどうすればいいですか?

答えて

25

何を知っておく必要があることEDMXファイルが3つの異なるセクションが含まれているだけでXMLファイルであることで、あなたの問題を理解するために、まず:

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

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

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

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

@Peruに関しては、(EDMX全体ではなく)関連するエンティティを削除し、「DBからモデルを更新」プロセスを実行するという方法があります。

希望すると便利です。

編集:Huagati DBML/EDMX Tools

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

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

+1

エンティティを削除するのは唯一の解決策ですか? – Peru

+0

ジョブを実行する既存のVSプラグインがあります。私は私の答えを編集しました。 – MaxSC

+0

@ MaxS-Betclic: 'csdlはDBモデルではなくオブジェクトモデルを見つけなければならない 'と言ったときの例を教えてください。 –

4

個人的には、edmxファイルをXMLとして開き、問題のノードを見つけて削除します。このファイルはかなりわかりやすいです - 少なくとも試してみるのは怖いことはありません。

0

プロジェクトのビューでは、手動編集のみが機能しました。 (smallintから小数点以下(18,2)へ)

.EDMXファイルをテキストエディタで開き、適切なセクションを見つけ、プロパティタイプ= "..."の値を手動で変更します。

関連する問題