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