c# - 如何包含列表中包含的类型的派生属性
问题描述
我有一个带有管道列表的数据上下文。我想查询一个包含其所有属性和子属性的管道。一个管道有一个阶段列表。基本阶段类型是抽象的。在列表中,可以有不同子类型的阶段,例如SpecialStage。SpecialStage 具有类型为 SpecialStageSettings 的属性设置。我想特别在查询中加载这个 SpecialStageSettings 对象。
使用 Entity Framework 6.x,我尝试了
var pipeline = context.Pipelines.Include(x => x.Stages).SingleOrDefault(x => x.Id == idOfAddedPipeline);
但这并不完全有效,因为 SpecialStage 类型的 Settings 属性保持为空。如何包含要包含在查询结果中的所有子属性和子子属性?
数据模型如下:
public abstract class EntityBaseModel<TKey>
{
public TKey Id { get; set; }
}
public class Pipeline : EntityBaseModel<string>
{
public List<Stage> Stages { get; set; }
}
public abstract class Stage : EntityBaseModel<string> { }
public class SpecialStage : Stage
{
public SpecialStageSettings Settings { get; set; }
}
public abstract class StageSettings : EntityBaseModel<string> { }
public class SpecialStageSettings : StageSettings
{
public double Timeout { get; set; }
public int TriggerMode { get; set; }
}
解决方案
要包括设置实体,请使用选择并指定要加载的实体。
var pipeline = context.Pipelines.Include(x => x.Stages.Select(s => s.Settings)).SingleOrDefault(x => x.Id == idOfAddedPipeline);
您必须选择要加载的每个实体。
推荐阅读
- javascript - 查询 500 多个股票代码的 alpha vantage api 的最佳方法 - Javascript
- javascript - FCC 中间算法脚本:Pig Latin
- python-3.x - python解析器read_file()AttributeError:'NoneType'对象没有属性'infile'
- node.js - Node.js + Mongoose - 每次都没有获取数据
- java - 在 Selenium + Java 中向 div 发送文本
- javascript - nodejs 服务器应用程序的记录器
- php - Save PHP output as a GeoJSON file
- python - Pandas - 用新值复制多行
- android - Android 依赖 'com.android.support:support-v4' 有不同的版本颤振
- asp.net-core-mvc - IClientValidator 是否支持输入文件?