我想检索存储为列表的所有Property实体记录。 该实体具有照片集合,该集合最多可填充5张图片。
为了减少加载时间,我希望检索属性列表,并在每个属性内仅获取集合中的第一张照片。 由于此查询
List<Domain.Property> data = session.Query<Domain.Property>()
.Fetch(x => x.Photos.First())
.ToList();
我得到了这个错误。一个fetch请求必须是一个简单的成员访问表达式;'[100002]'是一个SubQueryExpression而不是。参数名称:relatedObjectSelector。
所以我使用
List<Domain.Property> data = session.Query<Domain.Property>()
.ToList();
我试图在列表和foreach循环中检索属性,以便访问每个属性并将照片对象加载到nhib.session中,就像这样
var a = PropertyViewModel.FromDomainModel(data, session);
public static List<PropertyViewModel> FromDomainModel(IList<Property> x, ISession session)
{
List<PropertyViewModel> dataVm = new List<PropertyViewModel>();
foreach (Property p in x)
{
Photo firstPhoto = session.Get<Photo>(p.Photos[0].Id);
dataVm.Add(new PropertyViewModel(p, firstPhoto));
}
return dataVm;
}
public PropertyViewModel(Property x, Photo y)
{
Id = x.Id;
...
Photo = new Photo();
Photo = y;
}
这种方法看起来很好(至少对我来说是这样的:)),但它根据nhib. profiler加载了65个实体(其中照片标识符有46个,属性标识符有19个)。 (它应该首先加载19个属性标识符和19个照片标识符,每个属性的第一张图片)。
我在这里做错了什么?
我不熟悉投影,所以这应该是最后的解决方案。
谢谢
session.Query<Domain.Property>().Fetch(x => x.Photos).First().ToList()
吗? - GregRos