我们说我有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
的映射中强制加入。
答案 0 :(得分:0)
应该可以做这样的事情
References<User>(x => x.TheUser)
.Fetch
.Join()
或
References<User>(x => x.TheUser)
.Fetch
.Select()