强制加入类的映射内部

时间:2013-10-22 20:45:44

标签: c# nhibernate join fluent-nhibernate fluent-nhibernate-mapping

我们说我有2个课程,UserMessage

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的映射中强制加入。

1 个答案:

答案 0 :(得分:0)

应该可以做这样的事情

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

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