2008-10-15 17 views
6

Oturumun başlatılmamış bir proxy'si nedeniyle oturum.Save() çağrılırken bir NHibernate.PersistentObjectException almaya devam ediyorum(). Kaskad ayarlarımla uğraşırsam, onu ortadan kaldırabilirim, ancak çocuk nesneler kaydedilmiyor.NHibernate: başlatılmamış proxy kaydetme için kaydedildi() ve cascade

Bulduğum tek diğer çözüm, aşağıdakileri DefaultSaveEventListener ürününe ekleyerek gerçekleştirmekti.

protected override bool ReassociateIfUninitializedProxy(object obj, global::NHibernate.Engine.ISessionImplementor source) 
    { 
     if (!NHibernateUtil.IsInitialized(obj)) 
      NHibernateUtil.Initialize(obj); 

     return base.ReassociateIfUninitializedProxy(obj, source); 
    } 

Bu açıkça ideal bir çözüm değildir.

Herhangi bir fikrin var mı?

+0

Bunun için daha iyi bir çözüm buldunuz mu? Şu anda ReassociateIfUninitializedProxy'yi geçersiz kılmakta bahsettiğiniz yaklaşımı kullanmak zorundayım. –

+0

Henüz bir çözüm bulamadım ... – jonnii

+0

Bu sorunu nesneleriniz veya belirli bir nesne ile görüyor musunuz? Eğer belirli bir nesnesi, modelinizi ve haritanızı kullanarak sorunu güncelleyebilir misiniz? – Baz1nga

cevap

2

Kök toplam varlık üzerinde bir listede bulunan bir alt nesne ile mi çalışıyorsunuz? Eğer öyleyseniz, çocuğunuzla birlikte, kök ile çalışmalı, değişiklikleri yapmalı ve çocuğu değil kökünü kaydetmelisiniz.

+0

Artık bu proje üzerinde çalışmıyorum, ama muhtemelen bunun sebebi olacağını düşünüyorum. – jonnii

2

Benzer bir sorunla karşılaştım.

düzeltme basitti: use ISession.Get() değil ISession.Load()

+0

yükseliş, ölülerden yükseliş! – Jaguar

+0

Bu hatayı alıyorum ve ISession.Load veya herhangi bir aşırı yüklenme başvurusu yok. – Rabid

4
Orada

hiçbir overidden veya genişletilmiş davranışı içeren özel bir DefaultSaveEventListener alt sınıfının yalnızca varlığının aşağıdaki yapılandırma Xml kullanarak, benim için bu istisnayı tetiklemek için yeterlidir:

<event type="save-update"> 
    <listener class="MyNamespace.MyCustomSaveEventListener, MyAssembly" /> 
</event> 

Bu tartışmaya in this question devam ediyorum.

Güncelleme:

Yanlışlıkla bu sorun benim için go away yapılmış üst sınıf değiştirme DefaultSaveEventListener yerine DefaultSaveOrUpdateEventListener türetilmiştir almıştı.

+2

Ahh aptal ben 'DefaultSaveOrUpdateEventListener' yerine' DefaultSaveEventListener' türetiyordum, bu problemin üstesinden gelmek süper sınıfı değiştirdi. – Rabid

+0

+1 - Bu, bu hatayı almamın nedeni ve düzeltmesiydi. Yorumunuzu cevabınıza taşımanızı tavsiye ederim, çünkü bu birisinin neden bu hatayı alabileceği konusunda yardımcı olabilir. –