0

に参加します特定のビュッフェに属し、レシピカテゴリを含むすべてのレシピ。が働いていない含めるには、私は、エンティティ(多対多が、私もunnessecary小道具を削除)を次している例として、エンティティ

public IList<Recipe> GetRecipes(int buffetId) 
{ 
    return _dbContext.BuffetRecipes 
    .Where(item => item.BuffetId == buffetId) 
    .Include(item => item.Recipe) 
    .ThenInclude(item => item.Category) 
    .Select(item => item.Recipe) 
    .ToList(); 
} 

私が得たリストは常にprop Category = nullのレシピを返します。 Select()と一緒にInclude()の作業を行うソリューションが見つかりませんでした...

何が間違っていますか?

UPDATE:

私はそれがこのように動作させることができます...しかし、私の気持ちは、私は(2 ToListメソッドを持っているので、これは良い方法ではありませんと言う)を呼び出します...しかし、今私は、カテゴリ私の結果に含まれています:

public IList<Recipe> GetRecipes(int buffetId) 
{ 
    return _dbContext.BuffetRecipes 
    .Where(item => item.BuffetId == buffetId) 
    .Include(item => item.Recipe) 
    .ThenInclude(item => item.Category) 
    .ToList() 
    .Select(item => item.Recipe) 
    .ToList(); 
} 
+0

なぜ、 'Buffet'と' Recipe'の両方のコレクションではなく、 'BuffetRecipe'クラスでやっていますか?あなたは2人の間を移動する能力を失います。 'BuffetRecipe'クラスは、多対多の関係を管理するためにC#で必要としないテーブルとして作成されます。 – krillgar

+1

EFコアでは、結合エンティティなしの多対多はありません。そのため、新しいEFコアでこのような関係を実現するために、BuffetRecipeエンティティを手動で作成する必要があります... – Simon

+0

私は、 includeは最後にSelectを使わずに作業しています。これは設計によるものですか? – Simon

答えて

1

Includeは、クエリの最終結果に適用できる場合にのみ有効です。

にそれを変更することができ

あなた...

return _dbContext.BuffetRecipes 
    .Where(item => item.BuffetId == buffetId) 
    .Select(item => item.Recipe) 
    .Include(rcp => rcp.Category) 
    .ToList() 

...しかし、これの欠点は、(彼らはBuffetRecipesを持っているとして、多くのように)あなたがRecipe秒を複製ということです。それはRecipeでクエリを開始すると良いでしょう:

return _dbContext.Recipes 
    .Where(rcp => rcp.BuffetRecipes.Any(br => br.BuffetId == buffetId)) 
    .Include(rcp => rcp.Category) 
    .ToList(); 

あなたは、私がナビゲーションプロパティRecipe.BuffetRecipesを追加するために自由を取っていることがわかります。これは、あなたのモデルには何の問題もないはずです(逆に言います)。

+0

あなたのご意見ありがとうございます...しかし、私はあなたの最初のクエリが動作しないことを伝えなければならない...それはカテゴリを含まないことを意味します...私は、Select()の後にインクルードを入れても。 – Simon

+0

のようなSQLでのあなたの2番目のクエリ結果:。。[レシピ] AS [アイテム] FROM SELECT XXXXXXXXXXは INNERは[RecipeCategories] [アイテム] [区分コード] = [R] ON [R] [ID]は がWHERE EXISTSとして参加します見えている(([BR] [BuffetId] = @__ buffetId_0)[BR] AS [BuffetRecipes] FROMを選択し、([アイテム]。[ID] = [BR] [RecipeId])) それほど良いことではない:-( – Simon

+0

それは私が期待するクエリです。最初のクエリに関しては、残念ながらEFコアでうまくいくものは決して上手くいくことはありませんが、私が言ったように、私はクエリを好きではありません。 –

関連する問題