假设我有 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 问题。
经过一些研究,我发现这个解决方案创建了表的连接:
_session.Query<Message>().Fetch(x => x.TheUser)
不幸的是,我不能(轻松)实现这一点,因为访问数据的逻辑位于通用存储库中,并且也被许多其他类使用。
所以我想知道是否有可能在我的类的映射中强制加入Message
。