2017-12-21 22 views
1

ナビゲーションプロパティを持つ2つのエンティティに対して左結合を実行しようとしています。私は遅延読み込みを無効にしました。ここで左の結合後にナビゲーションプロパティが表示されない

は私のコードです:

var awis = 
      from ai in Context.AdItems 
          .Include(ai => ai.Item) 
          .Include(ai => ai.Item.Buyer) 
          .Include(ai => ai.Item.OrderHeader) 
          .Where(ai => ai.AdYear == adYear && ai.AdNumber == adNumber) 
      join si in Context.StoreItems 
          .Include(si => si.Store) 
          .Where(si => si.StoreId == storeId) on ai.ItemId equals si.ItemId into x 
      from r in x.DefaultIfEmpty() 
      select new AdWeekItem 
      { 
       AdItemId = ai.AdItemId, 
       AdItem = ai, 
       StoreItemId = r == null ? 0 : r.StoreItemId, 
       StoreItem = r 
      }; 

外側には細かい作品に参加するが、私は私のナビゲーションプロパティが投影AdWeekItemに含まれていません。 AdWeekItem.AdItem.Itemがnullである

、など

は、どのように私はこれらのナビゲーションプロパティが含まれており、左外部結合を行うのですか?

+0

私は、レイジーローディングを明示的に無効にしました。私は遅延読み込みを使用したくありません。 – jlavallet

+0

コンテキストの作成に適切な外部キーを定義しましたか? – programtreasures

+0

'public int ItemId {get;セット; } [ForeignKey(nameof(ItemId))] パブリックItem Item {get;セット; } ' – jlavallet

答えて

2

EF6では、LINQクエリが投影(select new ...)で終了すると、はalways ignoredです。あなたの唯一のオプションは、明示的に含まれているしたいナビゲーションプロパティを照会して、最終的な結果に投影することである。

var temp = from ai in Context.AdItems 
          .Where(ai => ai.AdYear == adYear && ai.AdNumber == adNumber) 
      join si in Context.StoreItems 
           .Where(si => si.StoreId == storeId) on ai.ItemId equals si.ItemId into x 
      from r in x.DefaultIfEmpty() 
      select new 
      { 
       AdItemId = ai.AdItemId, 
       AdItem = ai, 
       ai.Item, 
       ai.Item.Buyer, 
       ai.Item.OrderHeader, 
       StoreItemId = r == null ? 0 : r.StoreItemId, 
       StoreItem = r, 
       r.Store 
      }; 

var awis = from x in temp.AsEnumerable() // pull into memory and continue   
      select new AdWeekItem 
      { 
       AdItemId = x.AdItemId, 
       AdItem = x.AdItem, 
       StoreItemId = x.StoreItemId, 
       StoreItem = x.StoreItem 
      }; 
EFは 関係フィックスアップによって、ナビゲーションプロパティの(すなわち自動人口を AdItem.Itemなどを埋めています

)。

関連する問題