首页 > 解决方案 > 如何包含列表中包含的类型的派生属性

问题描述

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

标签: c#.netentity-frameworkormentity-framework-6

解决方案


要包括设置实体,请使用选择并指定要加载的实体。

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

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


推荐阅读