【发布时间】:2016-11-04 03:31:25
【问题描述】:
我正在尝试构建一个查询来获取所有 Tour 对象的列表,并预加载每个 Tour 的最新版本(最新版本是最近创建的)。请参阅下面的模型。每个Tour 可以有多个关联的TourVersion 对象
class Tour {
public Guid TourId { get; set; }
public virtual TourVersion CurrentTourVersion { get; set; }
// Other properties etc.
}
class TourVersion {
public Guid TourId { get; set; }
public DateTime CreatedOn { get; set; }
// Other properties etc.
}
我能够完成我想要为每个Tour 运行另一个查询:
var tours = context.Tours.ToList();
foreach (var tour in tours)
{
tour.CurrentTourVersion = context.TourVersions
.Where(t => t.TourId == tour.Id)
// ToUnixTime is a custom extension method that returns a long
.OrderByDescending(t => t.CreatedOn.ToUnixTime())
.FirstOrDefault();
}
我希望能够在单个查询中完成此操作。有什么建议吗?
【问题讨论】:
-
您已经有一个
CurrentTourVersion导航属性。这意味着 EF 将为您加载它(懒惰或急切地) -
你可以改变你的班级结构吗?我认为一对多通常首先在 EF 代码中编码不同
-
我认为不会,因为每个 Tour 都有多个 TourVersions。 EF 怎么知道要加载多个 TourVersions 中的哪一个?
-
您当前的班级结构表明每个游览都有一个单一的游览版本。
-
每个巡演都有多个巡演版本,但只有一个当前版本(即最新版本)。这里的挑战是找到最新版本并在单个查询中为每个游览预取它
标签: c# entity-framework-4 one-to-many