2017-02-02 21 views
0

linqの外部キーテーブルで2つのテーブルを結合しようとしています。 2つのテーブルは アイテムとクラスで、外部キーテーブルはItemClasses(ItemId、ClassId)です。Entity Frameworkの外部キーテーブルで2つのテーブルを結合するにはどうすればよいですか?

コンテキストには外部キーテーブル用のDBSetがありません。追加するときにモデル作成エラーが発生します。

私は、エラーを見たとき、私はこのコードは、外部キーテーブルに

modelBuilder.Entity<Classes>() 
      .HasMany(e => e.Items) 
      .WithMany(e => e.Classes) 
      .Map(m => m.ToTable("ItemClasses").MapLeftKey("ClassId").MapRightKey("ItemId")); 

を呼び、私はクラスを介して項目を参照することができるはずのようなので、それが見えますが、どのように私は参加しないことに気づきましたテーブル?

私はFKテーブルは私のコンテキストではないときに加入しますかどのようにこの

  query = from ig in myCtx.Items.AsNoTracking()       
         //join di in myCtx.ItemClasses.AsNoTracking() on ig.Id equals di.ClassId 
         join c in myCtx.Classes.AsNoTracking() on di.ClassId equals c.Id 
         join dd in myCtx.SalesAssociates.AsNoTracking() on dd.Id equals ig.SalesAssociateId 

ような何かをしたいのですが、テーブルのいずれかで呼ばれますか?

+1

だから代わりに、あなたはこのようなものを使用します参加します。 LINQクエリで 'class.Items'を使うだけです。これは、これらのナビゲーションプロパティ*のためのものです。 –

答えて

1

まず、構成エラーが発生しています。 HasMany/WithManyを使用すると、実際には自動「リンク」テーブルを設定しているので、

m.ToTable("Classes") 

m.ToTable("ItemClasses") 

またはどのように正確にあなたがそのテーブルがデータベースに名前を付けることにしたいのでなければなりません。

第2に、EFで作業する場合、常にuse navigation properties rather than joinsより優先されます。自動リンクテーブルとの関係がmany-to-manyの場合、ナビゲーションプロパティを使用することは必須です。 EFは必要な結合を生成します。あなたは全く参加する必要はありません

query = from ig in myCtx.Items.AsNoTracking()       
     from c in ig.Classes 
     ... 
+0

ありがとう、私はあなたがそのようなクエリで連鎖することができるか分からなかった。それが私が探していたものです。 (あなたが見つけた設定エラーは私の間違いでした。私は編集します。) – NetHawk

関連する問題