C# 对nhibernate n+感到困惑;1警报信息

C# 对nhibernate n+感到困惑;1警报信息,c#,linq,nhibernate,orm,C#,Linq,Nhibernate,Orm,在我的查询中,我试图选择所有实体(其中20个)并像这样迭代集合 List<Domain.Property> data = session.Query<Domain.Property>().ToList(); PropertyViewModel viewModel; List<PropertyViewModel> listOfViewModels = new List<PropertyViewModel>(); foreach (Domain.P

在我的查询中,我试图选择所有实体(其中20个)并像这样迭代集合

List<Domain.Property> data = session.Query<Domain.Property>().ToList();

PropertyViewModel viewModel;
List<PropertyViewModel> listOfViewModels = new List<PropertyViewModel>();

foreach (Domain.Property prop in data)
{
    viewModel = new PropertyViewModel()
    {
        AdType = prop.AdType.ToString(), 
        CityName = prop.CityName, 
        ContructionYear = prop.ConstructionYear, 
        Photo = prop.Photos.First()

    };
}
listOfViewModels.Add(viewModel);
标记为为为每个属性选择N+1

(单个查询以获取属性列表),您正在执行另一个查询以获取第一张照片。在您尝试访问照片集并生成第二个查询之前,
Photos
集合不会被填充


作为原始查询的一部分连接到photos表,以将其简化为单个查询。

或在照片集合的映射中设置非零批量大小,使NHibernate一次为多个所有者初始化集合。@Michael Shimmins,但如果我在第一次查询中使用List data=session.query().Fetch(x=>x.photos.ToList();我会去拿所有的收藏品,我只需要第一张。第一张照片对你有什么特别的意义吗?现在加载第一张照片的方式将使用SQL server的自然排序顺序选择第一张照片,从长远来看,这可能不是您需要的。我只需要第一张照片,因为这是我在viewModel中使用的,没有其他地方可以减少加载时间。@Michael Shimins您可以展示加入照片对象的示例吗
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 = 117 /* @p0 */