我試圖通過添加適當的包含語句來加速一些我的數據庫層功能,以強制加載並減少我對數據庫進行的查詢次數。無法添加包含(急切加載)到正確的位置
但是,在90%的情況下,我遇到了問題,我並未進入正確的「起始位置」以進入我想要的包含。
我能想出的最簡單的例子:
我部,場和學生實體,它們之間的許多一對多的關係(以下多個部門的一些課程)。
現在我有一個函數
GetMasterCourses(Department dep)
這並不像
return dep.Courses.Where(c => c.level == "Master")
的問題是:我怎麼告訴EF加載與每個相關聯的所有學生詢問課程?
我發現的唯一的解決方案是一樣的東西:
courseIDs = dep.Courses
.Where(c => c.level == "Master").Select(c => c.courseID)
dbcontext.Courses
.Include("Students")
.Where(c => courseIDs.Contains(c.courseID) and c.level == Master)
這似乎是愚蠢不得不做這樣的解決辦法,只是爲了能夠指定正確的包含。我已經看過很多Include的例子,並且在stackoverflow上搜索了很多問題,但是不能真正找到任何有這個問題的人,儘管這似乎是一個很常見的問題。
所以你的輸入是一個'部門',是(我假設)不是上下文的一部分。你期望的回報類型是什麼? –
當你加載'Department'時,你是否急於加載'Courses'和'Students'? –
部門是一個函數的參數,例如通過'dbcontext.Departments.First()'檢索。 在此期間,課程和學生確實不急於加載。 期望的返回類型將是IQueryable,因此一組課程的相關學生收藏急於加載。 –
Wannes