2012-01-18 15 views
10

私は、ADO.NETエンティティデータモデル項目を使用してSQLデータベースからエンティティを生成しようとしており、ADO.NET DbContextジェネレータを使用してエンティティを生成しようとしています。データベースからedmxを生成すると、エンティティの1つが設計者に表示されないように見えますが、edmxの背後にあるコードを見るとコード内に表示され、dbContextを生成するとエンティティはまったく生成されません。 ..Entity Frameworkの生成にエンティティがありません

アドバイスをいただければ幸いです!

+2

多対多リレーションシップのジョインテーブルのエンティティがありませんか?これらのテーブルには、対応するエンティティクラスがありません。 – Slauma

+0

はい、多対多の接合テーブルです。面白い!あなたのお返事ありがとうございます! – Hidan

+0

OK、回答としてコメントを投稿しました。 – Slauma

答えて

15

エンティティが不足しているテーブルが多対多リレーションシップの結合テーブルである場合、データベースからモデルを作成するときにエンティティクラスを取得しません。 EFは、表に複合主キーを形成する2つの列があり、各列が2つの他の表に対する外部キーである場合、これを認識します。

EFは内部的に結合テーブルを管理し、エンティティとして公開しません。ナビゲーションコレクションが互いに向いている「左」と「右」のエンティティのみがあります。それらのコレクションに要素を追加または削除してリレーションシップを追加または削除すると、SaveChangesを呼び出すと、EFによって結合テーブルの正しいINSERTおよびDELETEステートメントが作成されます。しかし、これは内部的に発生し、完全にあなたに隠されています。

他の言葉では、すべてが問題ありません。

+0

ああ、もう少し説明してくれてありがとう! – Hidan

+0

そのエンティティを照会する方法はありませんか? – Hidan

+1

@Willku:直接SQLを使用するのとは別に、エンティティではないからです。ジョイン・テーブルは、EFが設計によって抽象化したSQLアーチファクトです。これはエンティティとしては必要ありません。左右のエンティティのナビゲーションコレクションを介して、ジョインテーブルのすべての操作を行うことができます。結合表に1つ以上の追加列がある場合は、その表のエンティティーを取得します。しかし、EF用語ではこれは多対多の関係ではなく、代わりにその中間エンティティとの2対1の関係です。 – Slauma

関連する問題