c# - Entity Framework 包括来自一对多关系的单个对象

标签 c# entity-framework-4 one-to-many

我正在尝试构建一个查询来获取所有 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();
}

我希望能够在单个查询中完成此操作。有什么建议吗?

最佳答案

Entity Framework 会自动为您加载相关实体,直到上下文处于事件状态。您通过

获得旅行列表
var tours = dbContext.Tours.ToList();

例如,您可以通过调用获取旅游版本

tours[i].CurrentTourVersion;

除非 dbContext 在您获得旅游版本之前在某个地方被处理,否则您将需要预先加载(请参阅 here)。这样您就可以获取并保留相关对象。

var tours = dbContext.Tours.Include(obj=>obj.CurrentTourVersion).ToList();

关于c# - Entity Framework 包括来自一对多关系的单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40409133/

相关文章:

c# - 对判别器值进行投影

c# - 如何为 Lync 2010 和 Skype For Business 编码

c# - 使用 Entity Framework 的自引用树的最有效方法

hibernate - Grails-使用列表时,关系的拥有方未保留

ios - 一对多关系 setter

c# - 如何以通用方式对 KeyValuePair 进行操作?

c# - 使用C#在数据库中搜索记录

c# - Entity Framework 4 和 Linq : OrderBy a field nested in a Query : refactor my code

c# - 强制 Entity Framework 生成的类具有 Pascal 大小写和列名称具有 Camel 大小写

c++ - 我如何知道 C++ 中所有者对象的地址?