我有两个班级:
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; }
}
使用以下流畅的nhibernate映射将Reference.Stamp映射为组件(以便“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 =&gt;类型的简单成员访问表达式。 o.Related; 'r.Stamp.CreatedBy'过于复杂。
关于如何让我的提取工作的任何想法?
答案 0 :(得分:4)
我认为这是LINQ提供商的限制。
你可以:
Fetch
(有更好的替代方案来解决N + 1问题;我更喜欢批处理)Component
尽管如此,我相信您的构造应该得到支持。您可以在https://nhibernate.jira.com
处打开问题