如何包括列表中包含的类型的派生属性

时间:2020-02-06 14:44:21

标签: c# .net entity-framework orm entity-framework-6

我有一个带有管道列表的数据上下文。我想查询一个包含其所有属性和子属性的管道。一个管道已获得阶段列表。基本阶段类型是抽象的。在列表中,可以有不同子类型的阶段,例如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; }
    }

1 个答案:

答案 0 :(得分:0)

要包含“设置”实体,请选择并指定要加载的实体。

var pipeline = context.Pipelines.Include(x => x.Stages.Select(s => s.Settings)).SingleOrDefault(x => x.Id == idOfAddedPipeline);

您必须选择要加载的每个实体。