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 中多级属性,确保在检索时完全填充复杂对象集合。
以上是Entity Framework的`include()`方法可以处理多个嵌套属性吗?的详细内容。更多信息请关注PHP中文网其他相关文章!