1. ホーム
  2. .net

[解決済み] なぜこのようなエラーが発生するのでしょうか。次の EntitySet/AssociationSet - Entity1 に対して指定されたマッピングがありません?

2022-11-16 08:17:22

質問

Entity Framework 4をモデルファーストアプローチで使用しています。

私はプロジェクトを開始し、エンティティを設計し、データベースを生成しました。すべてがうまくいきました。

その後、私は戻って、私のモデルに別のエンティティを追加する必要がありました。しかし、エンティティを EDMX にドラッグすると、このエラーが発生しました。

よしっ! Entity1をテーブルにマッピングすればいいんだ...。しかし、ちょっと! 私はモデルファーストアプローチを使っているので、DDLを生成するときに私のためにテーブルを作成することを期待しています。

このエラーを回避するにはどうすればよいですか?

どのように解決するのですか?

これは、EF4がモデルファーストで動作しているためです。

モデルファーストモデルを最初に作成したときは、SSDLが存在しない状態です。エンティティをドラッグしたり、関連付けたりすることができるのに、EDMX ファイルの SSDL を見てみると、どのエンティティも SSDL に関連するストレージ テーブルを持っていないことがわかります。

をクリックすると変わります。 Generate Database From Model コンテキストメニュー項目をクリックすると変わります。分かりにくいのは、このアクションが単に DDL スクリプトを生成する以上のことを行う点です。実際、SSDL 情報を含むように EDMX ファイルが変更されます。この時点から、EDMX ファイルは、デザイナー/CSDL のすべてのエンティティが SSDL のエンティティにマッピングされる必要がある状態になります。もしマッピングされない場合は、コンパイルタイムエラーが発生します。

次の EntitySet/AssociationSet - (EntityName) に対してマッピングが指定されていません。

もうひとつの興味深い事実は、コンパイルを妨げるようなエラーではないことです。確かに、出力クラス ライブラリーが生成されます。警告か何かであるべきではないでしょうか?

このエラーを防ぐために、新しいエンティティを挿入した後にしなければならないことは、次のとおりです。 Generate Database From Model を再度実行することです。これで SSDL が更新され、マッピングが修正されます。

EDIT

モデルファーストを使用せず、データベースから更新する場合、DBサーバーのテーブルを削除した場合にも、このエラーが発生します。これは、Entity Frameworkがエンティティを自動的に削除しないためです。エンティティを手動で削除すれば、このエラーは解消されます。