有条件地急于加载深层嵌套的对象

时间:2018-11-04 22:29:10

标签: c# entity-framework

这是一个示例架构:

public class LevelA
{
    [Key]
    public virtual int LevelAId { get; set; }

    public virtual string Field1 { get; set; }
    public virtual string Field2 { get; set; }

    // Navigation property
    public virtual ICollection<LevelB> LevelBs { get; set; }
}

public class LevelB
{
    [Key]
    public virtual int LevelBId { get; set; }

    [ForeignKey("LevelA")]
    public virtual int LevelAId { get; set; }
    public virtual LevelA LevelA { get; set; }

    public virtual string Field1 { get; set; }
    public virtual string Field2 { get; set; }

    // Navigation property
    public virtual ICollection<Product> Products { get; set; }
}

public class Product
{
    [Key]
    public virtual int ProductId { get; set; }

    [ForeignKey("LevelB")]
    public virtual int LevelBId { get; set; }
    public virtual LevelB LevelB { get; set; }

    public virtual string Field1 { get; set; }
    public virtual string Field2 { get; set; }

    // Navigation property
    public virtual ICollection<Price> Prices { get; set; }
}

public class Price
{
    [Key]
    public virtual int PriceId { get; set; }

    [ForeignKey("Product")]
    public virtual int ProductId { get; set; }
    public virtual Product Product { get; set; }

    public virtual DateTime StartDateTime { get; set; }
    public virtual DateTime? EndDateTime { get; set; }
    public virtual decimal Price { get; set; }
}

因此层次结构为LevelA-LevelB-产品-价格。价格表包括历史价格和未来价格变化。我想使用特定的LevelAId从控制器通过一个查询从数据库中检索完整的层次结构-仅包括结果中的当前价格。

include语句是否可能?如果没有,有没有一种方法可以用单个自定义查询填充此结构(包括导航属性),并且仅包含当前价格。还是只是为了载入所有价格并在后续代码中进行过滤,这是不可避免的(或更简单)吗?

0 个答案:

没有答案