2010-12-07 19 views
8

NH3 ve NHN ile yeniden derlenmiş NHN 1.1 kullanıyorum.NHibernate: başarıyla yükleyemiyor yüklüyor

Yüklerken her zaman profilini almak istediğim bir kullanıcı modelim var. Ben NH3 linq sağlayıcısı kullanıyorum, ancak Fetch yöntemi kullanamazsınız (NHibernate gizler ve bir IQueryable döndürür ve ToPagedList sorguya çağrılır benim deponun nedeniyle bu nedenle Fetch sorgu son çağrı olarak koymak için önler). UserMap olarak

belirlediğim:

HasOne(x => x.Profile) 
    .Not.LazyLoad() 
    .Cascade.All(); 

Ama OFF LazyLoad ayarı yardımcı olmuyor. Ben de getirme modu ile oynadım.

Beklentim, bu eşleştirmeyi tanımlarım varsa, Linq'e Kullanıcı varlığı istendiğinde Profil'in getirilmesini istediğimi bildirmemesi gerektiğidir. Linq haritalamayı onurlandırmalı, değil mi?

+1

hmmm ... 1-to-1'in her zaman hevesli bir şekilde getirildiğini düşündüm ... aslında tembel yükleme yapamayacağımı hatırlıyorum 1-to-1. Bu NH3 ile değişti mi? – dotjoe

+0

Referansım, NH Profiler. Biri için bir tane, bir tane de Profil için 2 tane istek görüyorum. Kabul etmeliyim ki, NH2 kullandığım zaman buna bakmadım. –

cevap

3

Bu problemi de yaşıyorum ve maalesef tasarım gereği olduğunu düşünüyorum. NHibernate 3.0 Linq sağlayıcısı, kapakların altında HQL kullanır ve HQL, bu bağlamda eşleştirmelerinizi onurlandırmaz. Örneğin,

session.CreateQuery ("Profilinden"). listesi() yaptıysam

Verirsin sadece tüm profillerin bir listesini almak ve bile kullanıcı sınıfı katılmayacağını senin mapping dış-join = true değerine sahiptir.

Eğer Kriterli API kullanılan eski NHibernate.Linq sağlayıcı veya doğrudan Kriterleri API kullanarak olsaydı.

session.CreateCriteria() Liste()

sana ulaşabilir Eşleme dosyanızın talep ettiği gibi, kullanıcılarla dışta kalan tüm profillerin bir listesini geri döndürün.

Artık, HQL destekli linq sağlayıcısının neden eşlemelerinizi onaramadığını bilmiyorum (ve bu konuda herhangi bir şey biliyorsa lütfen gönderin), ancak bu davranışı görmenizin nedeni budur.