データベース構造の変更後にエンティティモデルを正しく更新する方法

entity-framework entity-model

質問

テーブル構造、特にSQL Serverデータベースのテーブル間の関係にいくつかの変更を加えました。それでは、この新しいデータベース構造に基づいてEntityモデルを更新したいと思います。

edmxファイルを右クリックすると、 "データベースからモデルを更新"というオプションがあります。新しい列はEntityクラスに表示されますが、モデルにはまだ存在する多くのナビゲーションプロパティについて混乱しています。データベース( 編集:データベースの列は削除されていますが、モデルクラスのメンバも削除されません。)

私は何か悪いことをしていますか?それともナビゲーションプロパティの削除を含むモデルを更新するための別のオプションはありますか?それとも、モデルファイルでこれらのナビゲーションプロパティを手動で削除する必要がありますか。

Entity Framework Version 1(VS 2008 SP1)を使用しています。

事前に助けてくれてありがとう!

受け入れられた回答

あなたは更新するために正しいことをしています。ただし、モデルを自動的に生成したら、それをカスタマイズできます。あなたが更新するとき、EFデザイナーはあなたがしたかもしれないどんなカスタマイズでも試して保存したいです。これについては推測する必要がありますが、必ずしも正しいとは限りません。これがあなたを助けてくれるかもしれないので、私はそれがどのように推測するかを試みて説明しよう。

EDMXには3つの部分があります。

  • クライアントスキーマ(CSDL)
  • ストアスキーマ(SSDL)
  • クライアントと店舗間のマッピング(MSL)

デザイナーはストアスキーマを「所有」します。更新するたびに、ほとんど最初からこれが再生成されます。 SSDLを手動で編集してストアスキーマをカスタマイズすることは可能ですが、モデルを更新するとこれらの変更を失うことがよくあります。

一方、あなたはクライアントスキーマを「所有」しています。デザイナーは、最初に実行されたときにクライアントスキーマを生成し、新しくマップされたテーブルや列など、新しくインポートされたデータベースメタデータオブジェクトのクライアントスキーマを生成します。ただし、クライアントスキーマがオブジェクトに対して生成されると、デザイナーはカスタマイズ内容を保持しようとしているため、通常は再生成されません。したがって、クライアントスキーマに影響を与えるようにデータベースを変更した場合は、クライアントスキーマを手動で更新する必要があります。これはGUIデザイナでも手動でも、XMLで行うことができます。

あなたの場合、もっとも簡単なことはおそらくGUIデザイナでナビゲーションを選択してそれを削除することでしょう。これは、関係のどちら側にも、データベースにナビゲーションのIDプロパティがもう存在しないことを前提としています。


人気のある回答

カスタマイズされていないエンティティモデルを使用していて、SQLデータベースからVSプロジェクトに変更を加えるだけの場合は、エンティティモデルを削除して同じソースから再生成するのが最も簡単です。このようにして、EDMXの3つの部分すべてにデータベースの内容が反映されます。私は以前に「データベースからモデルを更新する」オプションを使用し、その後XML /デザイナを編集していましたが、大規模なデータベースを扱う場合は面倒で時間のかかる作業であることがわかりました。誤解しないでください、それは100%動作しますが、それを再作成することであなたのモデルを新鮮に保つために非常に速いです。後でいくつかのLINQ-to-SQLクエリを編集する必要があったとしても、EDMXモデルを編集するよりもLINQ-to-SQLクエリを編集するほうが良いと思います。それは言った、私はまだそれをする必要はありませんでした。重要:モデルを以前と同じ設定で再作成してください。たとえば、以前にオブジェクト名を複数形にしないでモデルを作成した場合は、同じことを実行してください。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ