Fluent Nhibernate Индивидуальная ленивая загрузка при вызове метода

94
6

Вот мои классы и переопределения отображения, когда я вызываю метод 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();
}
}

спросил(а) 2021-01-14T00:25:25+03:00 2 недели назад
1
Решение
61

Используйте References вместо HasOne. HasOne - герметичная муфта.

Обратите внимание, что ваш IsActive() возвращает свойство Enabled которое связано с вашим полем базы данных и должно быть загружено оттуда. Когда NHibernate выполняет запрос для заполнения этого свойства, он также выполняет другой запрос для заполнения MemberExtraFields MemberExtraFields { get; set; } MemberExtraFields MemberExtraFields { get; set; } MemberExtraFields MemberExtraFields { get; set; }.

См. Принятый ответ здесь.

ответил(а) 2021-01-14T00:25:25+03:00 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема