IncludeまたはThenIncludeまたはSelect / Many with ONEクエリで関連データを読み込めません

c# entity-framework-core

質問

1テストには1つのテストタイプが割り当てられています。

私はすべてのTestTypeエンティティをTest OR notおよびSchoolclass、SubjectおよびAssigned Pupilsとの関係でテスト(PupilsTests)にロードする必要があります。

実行時に.SelectManyまたは.Selectがここで失敗します。

私はIncludeとThenIncludeの異なる組み合わせを試しましたが、PupilsTestsでテストを取得する機会はありませんでした。

私は私のクエリを起動したとき、私はテストだけでPupilsTestsを得ることができますcontext.Tests

innerjoin - -それは、私がテストに割り当てられたTestTypesのみ取得結果を持っていますが、私はすべてのTestTypesとそれらのテストとそのPupilsTestsを必要とし、私は1つのクエリでそれをしたいです。

var testtypes = await context.TestTypes
                   .Include(x => x.Schoolclass)
                   .Include(x => x.Subject)
                   .Include(x => x.Tests.SelectMany(z => z.PupilsTests))
              .Where(t => t.SchoolyearId == schoolyearId)
              .AsNotTracking()
              .ToListAsync();



        public class TestType
{
    public TestType()
    {
        Tests = new HashSet<Test>();
    }
    // Props removed for clarity
    public int Id { get; set; }   
    public ISet<Test> Tests { get; set; }
    public Schoolyear Schoolyear { get; set; }  
    public Schoolclass Schoolclass { get; set; }   
    public Subject Subject { get; set; }
    public int SchoolyearId { get; set; }
}

  public class Test
    {
        public Test()
        {
            PupilsTests = new HashSet<PupilTest>();
        }
        // Props removed for clarity
        public int Id { get; set; }           
        public ISet<PupilTest> PupilsTests { get; set; }
        public TestType TestType { get; set; }


    }

受け入れられた回答

EF6のEFコア相当構文

.Include(x => x.Tests.SelectMany(z => z.PupilsTests))

.Include(x => x.Tests).ThenInclude(x => x.PupilsTests)

ThenInclude内部にVS Intellisenseの問題があるように見えるので、上記を入力するだけで、正常にコンパイルされ、動作します。

また、EF Coreプロセスのコレクションには異なる方法(EF6のように単一のクエリを使用しない)が含まれているので、上記の例では3つのSQLクエリが生成されて実行されます。

アップデート: VS Intellisenseの問題は、EF Coreのドキュメント「 複数のレベルを含む」セクションで具体的に言及されています

注意!

Visual Studioの現在のバージョンでは、コード補完のオプションが正しくないため、コレクションのナビゲーションプロパティの後にThenIncludeメソッドを使用すると、正しい式に構文エラーが表示される可能性があります。これはhttps://github.com/dotnet/roslyn/issues/8237で追跡されたIntelliSenseバグの症状です。コードが正しく、正常にコンパイルできる限り、これらの偽の構文エラーは無視しても安全です。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ