0

假设我有 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

4

1 回答 1

0

应该能够做这样的事情

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

或者

References<User>(x => x.TheUser)
    .Fetch
    .Select()
于 2013-10-23T01:01:57.123 回答