У меня есть странная проблема в моем текущем проекте. Ленивая загрузка запросов не работает. Когда я запрашиваю список, nhibernate извлекает все ассоциации отдельно.NHibernate создает прокси через session.Load(), но не через Linq или Criteria API
Я извлек небольшие его части и поместил их в отдельное решение. В основном то, что у меня есть сейчас, это таблица счетов и таблица AccountSync. Оба имеют идентификатор и URL-адрес, а идентификатор - только db-guid.
Мои классы:
public class HippoAccount
{
public virtual Guid Id { get; set; }
public virtual string Url { get; set; }
public virtual HippoAccountSync Sync { get; set; }
}
public class HippoAccountSync
{
public virtual Guid Id { get; set; }
public virtual string Url { get; set; }
public virtual HippoAccount Account { get; set; }
}
Когда я теперь загрузить объект через его справ:
var account = session.Load<HippoAccount>(accountId);
Console.WriteLine(NHibernateUtil.IsPropertyInitialized(account, "Sync"))
... она возвращает false
и сама учетная запись является прокси.
Но при загрузке списка с помощью критериев API:
var account = (HippoAccount)session
.CreateCriteria(typeof (HippoAccount))
.Add(Restrictions.Eq("Id", accountId))
.List()[0];
... свойство Sync
инициализируется (запуская второй запрос на выборку), а возвращаемый объект не является прокси-сервер.
Это поведение по умолчанию? Что я ошибаюсь?
отображение является:
<class name="HippoAccount" table="AllAccounts">
<id name="Id" type="guid">
<generator class="guid"/>
</id>
<property name="Url" />
<many-to-one
class="HippoAccountSync"
name="Sync"
not-found="ignore"
property-ref="Url">
<column name="url" />
</many-to-one>
</class>
<class name="HippoAccountSync"
mutable="false"
table="Accounts">
<id name="Id" type="guid">
<generator class="guid"/>
</id>
<property name="Url">
<column name="serviceUri" />
</property>
<many-to-one class="HippoAccount"
name="Account"
property-ref="Url"
not-found="ignore">
<column name="serviceUri" />
</many-to-one>
</class>
не уверен, если это полностью связаны, но есть проблемы с не-FOUND = "игнорировать": http://nhjira.koah.net/browse/NH-1001 http: //guildsocial.web703 .discountasp.net/dasblogce/CommentView, guid, ba00b19d-bd60-442b-b2e7-935277a9f1eb.aspx –
Вы правы. Другой проблемой является свойство-ref - он также отключает ленивую загрузку. http://maonet.wordpress.com/2007/12/05/lazy-load-conflicts-with-property-ref-in-many-to-one-mapping/ –