C# 类映射内部的强制联接

C# 类映射内部的强制联接,c#,nhibernate,join,fluent-nhibernate,fluent-nhibernate-mapping,C#,Nhibernate,Join,Fluent Nhibernate,Fluent Nhibernate Mapping,假设我有两个类,User和Message 公共类用户 { 公共虚拟Guid Id{get;set;} 公共虚拟字符串名称{get;set;} } 公共类UserMap:ClassMap,IMappedEntity { 公共用户映射() { Id(x=>x.Id); Map(x=>x.Name); } } 公共类消息 { 公共虚拟Guid Id{get;set;} 公共虚拟字符串文本{get;set;} 公共虚拟用户用户{get;set;} } 公共类MessageMap:ClassMap,IMa

假设我有两个类,
User
Message

公共类用户
{
公共虚拟Guid Id{get;set;}
公共虚拟字符串名称{get;set;}
}
公共类UserMap:ClassMap,IMappedEntity
{
公共用户映射()
{
Id(x=>x.Id);
Map(x=>x.Name);
}
}
公共类消息
{
公共虚拟Guid Id{get;set;}
公共虚拟字符串文本{get;set;}
公共虚拟用户用户{get;set;}
}
公共类MessageMap:ClassMap,IMappedEntity
{
公共消息映射()
{
Id(x=>x.Id);
映射(x=>x.Text);
引用(x=>x.TheUser)
}
}
当我想加载一些消息时,也必须加载引用的用户。据我所知,nHibernate通常通过为每个用户创建一个新的sql命令来实现这一点,从而导致N+1问题

经过一些研究,我发现了这个解决方案,它创建了到表的连接:

\u session.Query().Fetch(x=>x.TheUser)
不幸的是,我无法(轻松地)实现这一点,因为访问数据的逻辑位于通用存储库中,并且被许多其他类使用


因此,我想知道是否有可能在我的类
Message

的映射中强制加入这样的操作

References<User>(x => x.TheUser)
    .Fetch
    .Join()
References(x=>x.TheUser)
取来
.Join()

References(x=>x.TheUser)
取来
.选择()

为什么类消息“public virtual string User{get;set;}”的属性。。。。。。你为什么不做“公共虚拟用户TheUser{get;set;}…………注意,我在校对NHiberate时使用了“The”前缀以避免歧义。PS。我是在“询问”…而不是“攻击”也许你有正当的理由。但我觉得有点可疑。不仅可疑,而且完全错了;)我简化了我的真实映射,忽略了这一点。我编辑了这个问题,谢谢你的提示@根据我的更正,你知道如何解决这个问题吗?不,我看过了。我无法理解这一点。根据NHProf的说法,这两个修改都不会影响创建的SQL查询。
References<User>(x => x.TheUser)
    .Fetch
    .Select()