Let's say I have 2 classes, User
and 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)
}
}
When I want to load some Messages, the referenced user has to be loaded as well. As far as I know, nHibernate usually does this by creating a new sql command for every user, causing N+1 problems.
After some research I found this solution which creates a join of the to tables:
_session.Query<Message>().Fetch(x => x.TheUser)
Unfortunately, I can not (easily) implement this, because the logic for accessing data lays inside a generic repository and is used by a lot of other classes as well.
So I would like to know whether there's any possibility to force a join inside of the mapping of my class Message
.