無法使用Include或ThenInclude或Select / Many with ONE查詢加載相關數據

c# entity-framework-core

1測試分配了1個TestType。

我需要加載與Test OR not和Schoolclass,Subject和Assigned Pupils相關的所有TestType實體到測試(PupilsTests)

.SelectMany或.Select在運行時失敗。

我嘗試了Include和ThenInclude的不同組合,但沒有機會通過PupilsTests進行測試。

當我使用context.Tests開始查詢時,我只能通過測試獲得PupilsTests

但結果是我只得到TestTypes分配給Test - innerjoin - 但我需要所有TestTypes及其測試和他們的PupilsTests,我想在一個查詢中。

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; }


    }

一般承認的答案

EF Core的EF Core等效語法

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

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

請注意, ThenInclude似乎存在VS Intellisense問題,因此只需鍵入上面的內容即可成功編譯並運行。

另請注意,EF Core進程集合包含不同(不使用EF6中的單個查詢),因此上面將生成並執行3個SQL查詢。

更新:現在,在包含多個級別部分的EF Core文檔中特別提到了VS Intellisense問題:

注意!

當前版本的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合法嗎? 是的,了解原因