このエラーが発生する理由:次のEntitySet / AssociationSet-Entity1にマッピングが指定されていません。


96

Entity Framework 4をModel Firstアプローチで使用しています。

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

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

ここに画像の説明を入力してください

よし!Entity1をテーブルにマップする必要があるだけです。私はModel Firstアプローチを使用していますが、DDLを生成するときにテーブルが作成されることを期待しています。

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


1
モデルからデータベーススクリプトを生成できますか?
Ladislav Mrnka、2011

回答:


147

これは、EF4がモデルファーストで動作する方法が原因です。

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

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

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

もう1つの興味深い事実は、コンパイルを妨げる種類のエラーではないということです。実際、出力クラスライブラリを生成します。警告か何かじゃないの?

このエラーを防ぐには、新しいエンティティを挿入した後に行う必要があるのは、Generate Database From Modelもう一度行うことだけです。SSDLが更新され、マッピングが修正されます。

編集

model-firstを使用していない場合に「データベースから更新」すると、DBサーバーでテーブルを削除した場合にもこのエラーが発生します。これは、Entity Frameworkがエンティティを自動的に削除しないためです。エンティティを手動で削除すると、エラーは解消されます。


1
モデルをbdの変更に対して更新した後も同じ問題が発生しました(私のアプローチがモデルファーストではないため、これは適切ではありません)。
バランザ2013

5
@ balanza、model-firstを使用しておらず、データベースに基づいてモデルを更新する場合、EFデザイナーはエンティティを自動的に削除しないため、サーバーのテーブルを削除するとこのエラーが発生します。手動でエンティティタイプを削除すると、エラーが消えます
アンドレ・ペーニャ

エンティティデータモデルのxmlファイルで直接変更しました。テーブルと関数のヒープがあり、いくつかの不一致のリスクがあったため、手動で行いました。
Bat_Programmer 2015年

これは非常に役立ちます。また、モデルファーストと「データベースからの更新」を使用していて、新しいテーブルを取得している場合も、エラーが発生します。ただし、[モデルからデータベースを生成]を実行すると(実際に生成されたスクリプトを実行する必要はありません-データが失われます!)、コードのマッピングの問題が修正され、今後は問題なく使用できます。
Brian Warshaw 2015年

1
既に展開されているSQL Server CEデータベースのスキーマ更新をどのように処理しますか?まったく関係のない手順の場合、これを別の質問に移動できます
FYK

35

2つのエンティティ間の関連付けを作成した後に参照制約を作成するのを忘れたため、同じエラーが発生していることがわかりました。


13
参考:関連付けのプロパティを確認すると、下部の[参照制約]が空になります。省略記号をクリックして、制約を作成します。
PatriceCalvé2014年

これは私を助けました。起点エンティティからナビゲーションエンティティへの1 .. *関係を作成する必要がありました。
duyn9uyen

21

エラー3027:次のEntitySet / AssociationSet ... "にマッピングが指定されていません-Entity Frameworkの問題

Entities Frameworkを使用してモデルを開発している場合は、この厄介なエラーが発生することがあります。

エラー3027:次のEntitySet / AssociationSet [エンティティまたは関連付け名]にマッピングが指定されていません

これは、EDMですべてが正常に見える場合には意味をなさない場合がありますが、これは、このエラーがEDMと通常関係がないためです。それが言うべきことは「データベースファイルを再生成すること」です。

ご覧のとおり、エンティティはビルド中にSSDLとMSLをチェックするため、EDMを変更しただけで[ データベースモデルの生成]を使用していない場合は、SQLスクリプトに欠けているものがあると不平を言います。

つまり、簡単に言うと、解決策は、「モデルを最初に開発する場合は、EDMを更新した後に毎回データベースモデル生成すること忘れないでください 。問題が解決することを願っています」です。


これは、データベースモデルの生成を実行するこの同じエラーで機能し、例外をクリアしました
kolexinfos

7

私の場合、別の開発者が基になるデータベースからいくつかのテーブルを削除しました。これに気づき、エンティティからこれらのテーブルを削除すると、問題は解決しました。それは思ったほど明白ではありませんでした。


6

同じエラーに遭遇しましたが、model-firstを使用していませんでした。デザイナーに表示されなかったにもかかわらず、どういうわけか私のEDMXファイルにはテーブルへの参照が含まれていることがわかりました。興味深いことに、Visual Studio(2013)でテーブル名をテキスト検索すると、テーブルが見つかりませんでした。

この問題を解決するために、外部エディター(Notepad ++)を使用してEDMXファイル内の問題のあるテーブルへの参照を見つけ、そのテーブルへのすべての参照を(慎重に)削除しました。そもそもEDMXファイルがどのようにしてこの状態になったのかわかりません。


5

テーブルを変更したところ、edmxモデルブラウザで確認されたように、末尾に番号1の別のエンティティ(MyEntity1およびなどMyEntity)が作成されました。2つのエンティティについての何かが一緒になって処理を混乱させました。

テーブルの削除と再追加により修正されました。


TFSが接続されている場合は、削除後にedmxのチェックインを実行することに注意してください。次に、最新のものを入手して、明確な2ステッププロセスで追加し直します。そうでない場合、TFSは、問題を引き起こしているように見える同じ名前のエンティティの削除および再追加と混同されます。


テーブルを変更した後も同じ問題が発生しました。モデルの下のいくつかの場所で、番号1および2の同じエンティティ(MyEntity1、MyEntity2)を見つけました。すべてのブランチ(ダイアグラム、エンティティタイプなど)を調べ、MyEntityとMyEntity [n]のすべてのインスタンスを削除しました。適切な方法として、「クリーンソリューション」を実行し、データベースから更新してMyEntityのみを再度追加しました。
MsTapp 2016年

4

私にとってより速い方法は、テーブルを削除して再度追加することでした。それはそれらを自動マッピングしました。:)


2

Database Firstアプローチを使用している場合は、新しいエンティティを挿入した後にファイルをGenerate Database From Model右クリックしてもう一度.edmx選択するだけです。Generate Database From Model...


0

データベースからテーブルを削除したときにこのエラーが発生しました。EDMXダイアグラムを右クリックして[プロパティ]に移動し、[プロパティ]ウィンドウのリストからテーブルを選択して、ダイアグラムから削除(deleteキーを使用)することで解決しました。


0
  1. ソリューションエクスプローラーに移動し、[検索]ボタンをクリックします
  2. 両方Search within file contentをチェックしたままにしますSearch External Files
  3. マッピングが認識していないエンティティ名を入力します。
  4. 問題に関連するすべてのファイルを削除します。それらはおそらく同じ行方不明の実体にちなんで名付けられるでしょう。特に拡張子が.csまたは.ttの場合は、ファイルのコンテキストクラス名が含まれるファイルを削除しないでください。Context .csファイル内
  5. 欠落しているエンティティを参照しているすべてのコード行を削除します。彼らはこのようになります:

    public virtual DbSet< Entity1> Entity1 { get; set; }

このエラーは、データベースから削除されたテーブルに共通です。

データベース内のテーブルを削除したりweb.config.connectionStrings、EFマッピングされたデータベースのテーブルを変更したりするときに、元のマッピングの生成に使用されたテーブルではなく、新しいテーブルを指すようにすることが問題です。

3027エラーのあるこれらのエンティティが存在しないのは、この新しいデータベースです。


0

ストアドプロシージャのカスタム結果を作成しようとしたときにエラーが発生し、それをエンティティであると想定しました。

解決策は、モデルブラウザで複雑なタイプを作成し、その結果を「編集機能のインポート」に割り当てたことです。

この質問は、このエラーが発生したときにグーグルがあなたを連れて行く場所なので、ここに追加します。


0

すべてを正しく設定しましたが(カーディナリティと依存プロパティ)、エラーが発生し続ける理由を理解できませんでした。最後に、EFは従属テーブルの列を独自に生成し(table_tablecolumn)、テーブルとの関係がないため、マッピングが指定されていなかったことがわかりました。EDMXファイルの列を削除し、問題を修正したソリューションを再構築する必要がありました。私はDBアプローチを使用しています。


0

データベースからのモデルの更新が機能しません。

競合するエンティティを削除してから、データベースからモデルの更新を実行し、最後にソリューションを再構築する必要がありました。その後、すべてが正常に動作します。


0

他の人のためにこれを共有します。私の場合、共有MVCソリューションに取り組んでおり、ドロップダウンに使用するテーブルに共通モジュールを使用していました。新しいテーブルを追加してエンティティモデルを更新すると、エラーが発生しました。EDMXを更新したときに、おそらくデータベースへのアクセス権が更新されたため、特定のテーブルにアクセスできなくなりましたno mapping specified

再度追加してユーザーにアクセス権を与えるだけで問題は解決しました。


0

これは、名前を変更して再度追加する前に、edmxから明示的にいくつかのテーブルを削除しなかったためだと思います。代わりに、テーブルの名前を変更してから、データベースからモデルを更新しました。テーブルがなくなったことがわかり、モデルから削除したのです。次に、データベースから別のモデルの更新を行い、名前を変更したテーブルを追加しました。

サイトは新しいテーブルで作業していましたが、エラーが発生しました。最終的に、元のテーブルがまだモデル内にあることに気付きました。モデルからそれらを削除し(edmx画面でそれらをクリックし、キーを削除)、エラーは解消しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.