在类映射内部强制联接
本文关键字:内部 映射 | 更新日期: 2023-09-27 18:36:38
假设我有 2 个类,User
和 Message
public class User
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
}
public class UserMap : ClassMap<User>, IMappedEntity
{
public UserMap()
{
Id(x => x.Id);
Map(x => x.Name);
}
}
public class Message
{
public virtual Guid Id { get; set; }
public virtual string Text { get; set; }
public virtual User TheUser { get; set; }
}
public class MessageMap : ClassMap<Message>, IMappedEntity
{
public MessageMap()
{
Id(x => x.Id);
Map(x => x.Text);
References<User>(x => x.TheUser)
}
}
当我想加载一些消息时,还必须加载引用的用户。据我所知,nHibernate通常通过为每个用户创建一个新的sql命令来做到这一点,从而导致N + 1问题。
经过一些研究,我发现了这个解决方案,它创建了 to 表的连接:
_session.Query<Message>().Fetch(x => x.TheUser)
不幸的是,我不能(轻松)实现这一点,因为访问数据的逻辑位于通用存储库中,并且也被许多其他类使用。
所以我想知道是否有可能在我的类Message
映射中强制连接。
应该能够做这样的事情
References<User>(x => x.TheUser)
.Fetch
.Join()
或
References<User>(x => x.TheUser)
.Fetch
.Select()