Mam dziwny problem w moim bieżącym projekcie. Leniwe ładowanie zapytań nie działa. Kiedy wysyłam zapytanie do listy, nhibernate pobiera wszystkie powiązania osobno.NHibernate tworzy proxy za pomocą session.Load(), ale nie poprzez Linq lub API Criteria
Wyciągnąłem małe jego części i ułożyłem w osobne rozwiązanie. Zasadniczo mam teraz tabelę kont i tabelę AccountSync. Oba mają identyfikator i adres URL, a identyfikator to tylko db-guid.
Moje zajęcia są:
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; }
}
Kiedy teraz załadować obiektu poprzez jego GUID:
var account = session.Load<HippoAccount>(accountId);
Console.WriteLine(NHibernateUtil.IsPropertyInitialized(account, "Sync"))
... zwraca false
i sam rachunek jest proxy.
Ale kiedy ładuje listę poprzez kryteria API:
var account = (HippoAccount)session
.CreateCriteria(typeof (HippoAccount))
.Add(Restrictions.Eq("Id", accountId))
.List()[0];
... własność Sync
zostanie zainicjowana (wypalanie drugą kwerendę wybierającą) i zwrócony obiekt nie jest proxy.
Czy to domyślne zachowanie? Co robię źle?
Odwzorowanie jest:
<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>
nie wiem, czy to całkowicie związane, ale są problemy z nie-found = "ignoruj": http://nhjira.koah.net/browse/NH-1001 http: //guildsocial.web703 .discountasp.net/dasblogce/CommentView, guid, ba00b19d-bd60-442b-b2e7-935277a9f1eb.aspx –
Masz rację. Kolejną kwestią jest właściwość-ref - wyłącza również leniwy ładowanie. http://maonet.wordpress.com/2007/12/05/lazy-load-conflicts-with-property-ref-in-mem-to-one-mapping/ –