У меня есть устаревшая база данных, которую я сопоставляю с помощью NHibernate. Объектами, вызывающими озабоченность, являются учетная запись и список объектов уведомления. Объекты выглядят как:Lazy loading не работает для отношений «много-к-одному» при сопоставлении с не-ключевым полем с использованием свойства-ref
public class Notification
{
public virtual int Id { get; set; }
public virtual DateTime BatchDate { get; set; }
/* other properties */
public virtual Account Account { get; set; }
}
public class Account
{
public virtual int Id { get; set; }
public virtual string AccountNumber { get; set; }
/* other properties */
}
файлов отображение выглядит следующим образом:
<class name="Account" table="Account" dynamic-update="true">
<id name="Id" column="AccountID">
<generator class="native" />
</id>
<property name="AccountNumber" length="15" not-null="true" />
<!-- other properties -->
</class>
<class name="Notification" table="Notification">
<id name="Id" column="Id">
<generator class="native" />
</id>
<!-- other properties -->
<many-to-one name="Account" class="Account" property-ref="AccountNumber" lazy="proxy">
<column name="AcctNum" />
</many-to-one>
Однако, когда я создаю такие критерии, как
return session.CreateCriteria(typeof(Notification)).List<Notification>();
Я получаю случай Select N + 1 где каждая учетная запись загружается, даже если учетная запись никогда не ссылается. Почему все учетные записи загружаются, когда много-одно отображается как ленивый прокси?
я получаю один и тот же вопрос, я помню пост somehwere говорил много-к-одному собственности рефов не может быть ленивым загружен , Я просто не могу найти источник. Это было с NH 1.2 – Jafin