访问集合中的第一个元素

本文关键字:第一个 元素 集合 访问 | 更新日期: 2023-09-27 18:35:52

如果我发送名为 Property 的对象,当我只需要像这样从该照片集合中的第一个元素时,它有照片集合,这种方法是否加载集合

中的所有元素,而不是 assoc. 只像我想要的那样首先,或者这种方法是我需要的,首先从集合加载。

public PropertyHPViewModel(Property x)
{
    Id = x.Id;
    Created = x.Created;
    Title = x.Title;
    Photo = x.Photos.First();
}

从探查器生成的 SQL

SELECT photos0_.PropertyId    as PropertyId1_,
       photos0_.Id            as Id1_,
       photos0_.Id            as Id1_0_,
       photos0_.ImageData     as ImageData1_0_,
       photos0_.ImageMimeType as ImageMim3_1_0_,
       photos0_.PropertyId    as PropertyId1_0_
FROM   Photo photos0_
WHERE  photos0_.PropertyId = 129 /* @p0 */

更新因为我有 20 个生成的查询,它们仅在最后一行有所不同

WHERE photos0_.PropertyId = xxx /* @p0 */

其中数字是照片 ID 对象,我必须补充一点,根据 nhibernate 分析器,我在此查询上选择了 N+1 警报。

访问集合中的第一个元素

如果 x.Photos 不是 IQueryable,则 .First() 调用不能参与 ORM 发送的 SQL 查询。我怀疑是这种情况。

唯一的解决方案是从 ISession 手动构造查询。

当表达式树折叠时,NHibernate应生成SQL以仅检索单个实体。