Fluent Nhibernate 调用方法时一对一延迟加载

Fluent Nhibernate One-to-one lazy loading when invoking a method

这是我的 类 和映射覆盖,当我调用 Member 上的 IsActive 方法时,出于某种原因 nhibernate 从数据库中获取 MemberExtraFields。当我调用列表中的方法时,这会导致 n+1 个问题。

有什么办法可以解决这个问题,我很懒惰(NoProxy、Proxy、False)

public class Member
{
    public virtual Guid Id { get; set; }

    public virtual MemberExtraFields MemberExtraFields { get; set; }


    public virtual bool Enabled { get; set; }

    public virtual bool IsActive()
    {
        return Enabled;
    }

}

public class MemberExtraFields
{
    public virtual Guid Id { get; set; }

    public virtual bool ExcludeFromCompetitions { get; set; }

    public virtual Member Member { get; protected set; }
}

public class MemberMap : IAutoMappingOverride<Member>
{
    public void Override(AutoMapping<Member> mapping)
    {
        mapping.Id(x => x.Id).GeneratedBy.GuidComb();
        mapping.HasOne(x => x.MemberExtraFields)
                        .Cascade.All().LazyLoad(Laziness.NoProxy);
    }
}

public class MemberExtraFieldsMap : IAutoMappingOverride<MemberExtraFields>
{
    public void Override(AutoMapping<MemberExtraFields> mapping)
    {
        mapping.Id(x => x.Id).GeneratedBy.Foreign("Member");
        mapping.HasOne(x => x.Member).Constrained().ForeignKey();
    }
}

使用 References 而不是 HasOneHasOne 是紧耦合。

请注意,您的 IsActive() 方法 returns Enabled 属性 与您的数据库字段相关联,需要从那里加载。当 NHibernate 执行查询以填充 属性 时,它还会执行另一个查询以填充 MemberExtraFields MemberExtraFields { get; set; } 属性.

参考已接受的答案 here