ここで私のクラスとマッピングのオーバーライドは、Memberに対してIsActiveメソッドを呼び出すと何らかの理由でnhibernateがデータベースからMemberExtraFieldsをフェッチします。これは、リストのメソッドを呼び出すと、n + 1の問題を引き起こしています。 Fluent Nhibernateメソッドを呼び出すときに1対1の遅延読み込み
が、私はこの問題を解決する可能性が何もあり、私は(偽NoProxyディレクティブ、プロキシ、)すべての怠惰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();
}
}
'.HasOne()'の代わりに 'References()'を試しましたか?私が覚えていれば、 '.HasOne()'参照は常にロードされます。 – Rabban
@Rabbanは参照に変更しました –