我有两节课:
public class Reference
{
public virtual string Id { get; set; }
// ...
public virtual Stamp Stamp { get; set; }
}
public class Stamp
{
public DateTime? Created { get; set; }
public User CreatedBy { get; set; }
public DateTime? LastUpdated { get; set; }
public User LastUpdatedBy { get; set; }
}
Reference.Stamp 使用以下流畅的 nhibernate 映射映射为组件(以便“Stamp”字段出现在 Reference 表中):
public class ReferenceMap : ClassMap<Reference>
{
public ReferenceMap()
{
Id(e => e.Id);
// ...
Component(e => e.Stamp);
}
}
public class StampMap : ComponentMap<Stamp>
{
public StampMap()
{
Map(e => e.Created);
References(e => e.CreatedBy);
Map(e => e.LastUpdated);
References(e => e.LastUpdatedBy);
}
}
我想对“CreatedBy”和“LastUpdatedBy”字段进行急切的提取,以避免在列出我的“参考”项目时出现 N+1。
我试过这个:
Reference[] references = session
.Query<Reference>()
.Fetch(r => r.Stamp.CreatedBy)
.Fetch(r => r.Stamp.LastUpdatedBy)
.ToArray();
导致此错误:
System.ArgumentException:获取请求必须是 o => o.Related 类型的简单成员访问表达式;'r.Stamp.CreatedBy' 太复杂了。
关于如何让我的 fetch 工作的任何想法?