: 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.
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