Fluent Nhibernate Индивидуальная ленивая загрузка при вызове метода
Вот мои классы и переопределения отображения, когда я вызываю метод IsActive на Member, по какой-либо причине 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
вместо HasOne
. HasOne
- герметичная муфта.
Обратите внимание, что ваш IsActive()
возвращает свойство Enabled
которое связано с вашим полем базы данных и должно быть загружено оттуда. Когда NHibernate
выполняет запрос для заполнения этого свойства, он также выполняет другой запрос для заполнения MemberExtraFields MemberExtraFields { get; set; }
MemberExtraFields MemberExtraFields { get; set; }
MemberExtraFields MemberExtraFields { get; set; }
.
См. Принятый ответ здесь.