2010-11-16 7 views
6

Bu soruna bir yanıt bulamadım, bu yüzden yanlış yaptığım bir şey olduğunu varsayalım.Fluent NHibernate LazyLoad Sorunlar

persistenceModel.Conventions.Add(DefaultLazy.Always()); 

Ancak, benim varlıkları birinde HasManyToMany ilişkilerinin biri için istediğim istekli yükleme Ben gerçekleşecek: -

ben şöyle bir kongre belirledik ayarlanmış bir PersistenceModel var olarak kurma aşağıdaki gibidir: -

HasManyToMany(x => x.Affiliates).Not.LazyLoad(); 

Sezgisel, ben bir kongre olarak belirttiğiniz tembel yük varsayılan geçersiz kılma ama yine de tembel yükleri am olarak istekli yükleme işleminin gerçekleşmesini beklediğiniz. VarsayılanLazy kuralını asla ayarlamamışsam ve daha sonra LazyLoad'u tek bir ilişkide ayarlamış olsam da işe yaramıyor.

Herhangi bir fikrin var mı?

cevap

9

Not.LazyLoad() öğesini ayarladıktan sonra, NHibernate'e, üst yükler yüklendiğinde Satış Ortamı'nı yüklemesini söylersiniz. NHibernate, Affiliates koleksiyonuna erişip erişmediğinize bakılmaksızın Affliate'lerden çoktan çoğa tablosuna başka bir seçim yaparak bunu gerçekleştirecektir. NHibernate başka bir seçim kullanıyor çünkü bu varsayılan alma modudur. Sorgulamada veya eşlemede getirme modunu da geçersiz kılmak istersiniz. haritalama bunu yapmak için aşağıdaki ekleyin: Eğer NHibernate devam etmek istiyorsanız

HasManyToMany(x => x.Affiliates) 
    .Not.LazyLoad() 
    .Fetch.Join(); 

Ayrıca ".Cascade.AllDeleteOrphan()" eklemek isteyebileceğiniz yeni Affiliaites koleksiyona eklenir ve yetim olanları silin. Bunu yapmazsanız, açıkça session.Save (newAffiliate) çağrısı yapmanız gerekir. Aksi takdirde, Bağlı Kuruluşlar koleksiyonunuz yeni bir Bağlı Şirket içerdiğinde bir TransientObjectException alırsınız.

+0

Maalesef, burada alakalı olduğunu düşünmediğim kod bölümlerini kaldırdım. Ben de .FetchType.Join() var ve tembel yükleme kapatma hala çalışmıyor. Tembel yükleme işlemini kapatmanın tek yolu, benim için çalışmanın kongre kurarak olduğunu buldum. – Dotnet

+0

DefaultLazy.Always() kuralı ekledim ve Fetch.Join() uygulandığında HasManyToMany() ilişkisi doğru şekilde yükleniyor. Benim örneğimi GitHub'dan alabilirsiniz: https://github.com/JamesKovacs/JamesKovacs.StackOverflow/tree/master/FluentNhHacking/ –

+0

Pekala, iyi de olsa kodumu durumumda taklit ettim ve hala işe yaramadı. bu yüzden daha yakından bakmam gerekecek. Sorguların doğru olduğunu düşündüğüm tembel mi yoksa hevesle mi çalıştırıldığını belirlemek için .ShowSql() kullanıyorum? – Dotnet

0

Sormak için aptalca bir şey olabilir, ancak sorgunuzu oturumunuzda çalıştırdınız mı? Sonunda önce bu sorun vardı ve

Using(var session = OpenSession()) 
{ 
    session.Query<Entity>().ToList(); 
} 

Ben oturumu atmadan önce sorgulanan olmasaydı erişen edildi nesneleri fark Say.