我有一个带有管道列表的数据上下文。我想查询一个包含其所有属性和子属性的管道。一个管道已获得阶段列表。基本阶段类型是抽象的。在列表中,可以有不同子类型的阶段,例如SpecialStage。 SpecialStage具有类型为SpecialStageSettings的属性Settings。我想特别在查询中加载这个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; }
}
答案 0 :(得分:0)
要包含“设置”实体,请选择并指定要加载的实体。
var pipeline = context.Pipelines.Include(x => x.Stages.Select(s => s.Settings)).SingleOrDefault(x => x.Id == idOfAddedPipeline);
您必须选择要加载的每个实体。