16

テーブル構造、特に SQL Server データベース内のテーブル間の関係にいくつかの変更を加えました。今度は、この新しいデータベース構造に基づいてエンティティ モデルを更新したいと考えています。

edmx ファイルを右クリックすると、[データベースからモデルを更新] オプションが表示されます。しかし、これを行うと、50% の更新が行われます。エンティティ クラスに新しい列が表示されますが、対応する外部キーの関係が存在しないにもかかわらず、モデルにまだ存在する多くのナビゲーション プロパティについて混乱しています。データベース。(編集:データベースの列は削除されていますが、モデルクラスのメンバーも削除されません。)

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

Entity Framework バージョン 1 (VS 2008 SP1) を使用しています。

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

4

2 に答える 2

16

あなたは更新するために正しいことをしています。ただし、モデルを自動的に生成した後は、それをカスタマイズできます。更新するとき、EF デザイナーは、ユーザーが行った可能性のあるすべてのカスタマイズを保持しようとします。これについて推測する必要があり、常に正しいとは限りません。これがあなたを助けるかもしれないので、私はそれがどのように推測するかを説明しようとします.

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

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

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

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

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

于 2010-04-06T12:49:32.303 に答える
3

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

于 2014-12-10T11:17:18.210 に答える