2011-06-15 19 views
10
Ben ilişkinin bir tarafında aşağıdaki haritalama geçersiz kılma var

: BenFetch.Join() Akıcı NHibernate çalışmıyor

public void Override(AutoMapping<ItemAsmtDetailDh> mapping) 
{ 
    mapping.HasMany<WAsmtDetail>(x => x.WAsmtDetails).Inverse().AsBag().Cascade.AllDeleteOrphan().Access.PascalCaseField(Prefix.Underscore).Not.LazyLoad().Fetch.Join(); 
} 

ve ilişkinin diğer tarafında var:

public void Override(AutoMapping<WAsmtDetail> mapping) 
{ 
    mapping.References<ItemAsmtDetailDh>(x => x.ItemAsmtDetailDh).Not.Nullable().Not.LazyLoad().Fetch.Join(); 
} 

ShowSql seçeneğini kullandığımda, hala korkunç "n + 1 select" sorununu veren WAsmtDetails için ayrı select deyimleri yayınladığını görüyorum. Neden ".Not.LazyLoad(). Fetch.Join()" yok sayılıyor?

Not: Ben çünkü daha yeni sürümünde bir hata nedeniyle, Akıcı NHibernate sürüm 1.1, değil sürüm 2.1 kullanıyorum. (Hata ayrıntıları için this question cevabına bakın.) NHibernate 2.1.2.4000 sürümünü kullanıyorum.

cevap

7

Büyük olasılıkla bu verileri, eşleştirmede (HQL veya Linq gibi) etkilenmeyen bir şekilde Fetch.Join() etkilenmeyen bir şekilde yüklüyorsunuz.

haritalama belgede tanımlanan getirme stratejisi etkiler: Get yoluyla

  • alma() veya dernek
  • navigasyon zaman örtülü olarak gerçekleşir Yük()
  • alma NHibernate belgelerine alt seçim getirilirken kullanılırsa
  • ICriteria
  • HQL sorguları sorgular
+0

Cevabınız için teşekkürler, cremor. Durumumda, toplam kök düzeyinde bir nesne listesi almak için CreateCriteria kullanıyorum. Toplam kök, benim sorumda belirtilen "ItemAsmtDetailDh" sınıfının 2 seviyesidir. Sonra ItemAsmtDetailDh (1 seviye yukarı) ebeveynini siliyorum. NH, silme işleminin geri kalan kısmını geri almak için bu noktadan geriye doğru geri alıyor. Ben derneklerin navigasyonu ile bu bir geri alma durumu düşünürdüm. – MylesRip

İlgili konular