Entity Framework 多級屬性加載
Entity Framework 的 Include()
方法可以高效地預加載相關實體,但它能否處理多級嵌套屬性(例如包含複雜對象的嵌套集合)呢?
現有實現及限制
示例代碼展示了 Include()
方法可以加載一級屬性。如下查詢:
<code class="language-csharp">public IEnumerable<applicationserver> GetAll() { return this.Database.ApplicationServers .Include(x => x.ApplicationsWithOverrideGroup) .Include(x => x.ApplicationWithGroupToForceInstallList) .Include(x => x.CustomVariableGroups) .ToList(); }</code>
將檢索包含 ApplicationsWithOverrideGroup
屬性的 ApplicationServer
對象,該屬性包含 ApplicationWithOverrideVariableGroup
對象的集合。但是,ApplicationWithOverrideVariableGroup
集合中的 Application
和 CustomVariableGroup
屬性將不會被填充。
多級嵌套Include的解決方案
根據使用的 Entity Framework 版本,可以使用以下方法預加載多級屬性:
Entity Framework 6:
Entity Framework 6 的 Include()
方法接受 lambda 表達式。通過使用嵌套 lambda 表達式,可以指定多級包含:
<code class="language-csharp">var query = this.Database.ApplicationServers .Include(x => x.ApplicationsWithOverrideGroup .Select(y => y.Application)) .Include(x => x.ApplicationsWithOverrideGroup .Select(y => y.CustomVariableGroup));</code>
Entity Framework Core:
Entity Framework Core 引入了 ThenInclude()
方法,允許級聯包含。此方法在初始 Include()
之後使用,以指定更深層次的包含:
<code class="language-csharp">var query = this.Database.ApplicationServers .Include(x => x.ApplicationsWithOverrideGroup) .ThenInclude(y => y.Application) .ThenInclude(y => y.CustomVariableGroup);</code>
通過這些方法,可以預加載 Entity Framework 中多級屬性,確保在檢索時完全填充複雜對象集合。
以上是實體框架的「Include()」方法可以處理多層嵌套屬性嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!