NHibernate'de oturum yönetim sıkıntılarımı anlamaya çalışan bir zaman geçiriyorum. Sorunumun birçoğunun IoC ve AOP kavramlarının bilgi eksikliğinden kaynaklandığını düşünüyorum; En azından, Fabio Maulo'nun beni yönlendirmeye devam ettiği şeyi düşünüyorum.NHibernate oturum yönetimi ve tembel yükleme
Her neyse, benim sorunum, "get" aramaları yapıp sonucu bir kılavuza bağlayan bir win form uygulamasına sahip olduğum. Bağlamadan sonra, kullanıcı bir tür "yazma" eylemi gerçekleştirebilir ve bunlar, oturumdan sonra kullanım başına kavramı kullanmanın girişimi sırasında oturumun kapanmasına neden olur. Daha sonra kullanıcı, tembel yükleme işleminin başlamasına neden olan ızgarada ilerleyebilir ve şimdi oturum kapatıldı ve bir istisna alıyorum.
Görüşlerimi oturumlarım hakkında bilgilendirmek istemiyorum, kullanıcı formu kapattığında bir KillAllSessions göndermek istemiyorum. Ayrıca, bir kullanıcı, bu yöntemle ilişkili sorunları daha da karmaşık hale getirerek, herhangi bir zamanda açık olan birden çok biçime sahip olabilir. Aslında bütün bunların "sahnelerin ardında" çalışmasını istiyorum.
Bu sebeple şu ana kadarki düşüncem tembel yükleme çağrısını engellemek ve oturumun açık olup olmadığını kontrol etmek ve tekrar açmazsa, bilgi almak ve daha sonra yeniden kapatmaktır. Ancak, söyleyebildiğim kadarıyla, bu pek de fazla değil, esasen tembel yükleme zaten böyle çalışıyor. Proxy fabrika (NHibernate.Bytecode.Castle) tarafından durdurulur ve daha sonra oturumu kullanarak verileri alır. Bu yüzden, bu aramayı gerçekten durdurmalıyım, daha sonra oturumu yeniden açtıktan sonra orijinal amaçlanan aramaya geçmeliyim. Yani bu benim fikrim.
Soruma esas olarak, her şeyden önce, bununla ilgili olarak doğru yolu bile bulmanız gerekiyor. İkincisi ise, nereden başlayacağımı bile bilmiyorum. Yöntem çağrılarını hiçbir zaman engellemedim, teoride biliyordum ama pratikte değil. Rhino Commons gibi bu türden şeyler yapan kütüphaneler olduğunu biliyorum, ancak bu fırsatı öğrenmek ve daha iyi bir programcı olmak istiyorum. AOP ve Bağlam Nesneleri'ni anlamaya çalışıyorum ama şu an bunu yapmıyorum. Bazılarınız milletten yardım edebilir mi lütfen?
Yapılacak çok garip bir şey gibi görünüyor. Seans kapatıldıktan sonra atılmalıdır. Bir örnek verebilir misin? – Paco
Üzgünüm, hangi kısım garip görünüyor? Bir örnek olarak, bana bu sorunu yüzleştiren olaylar dizisini vermekten başka bir şey bilmiyorum: 1. Oturum Aç 2. Verileri IList şeklinde alın 3. Bir ITyped özelini doldurun koleksiyon 4. Teyp için 5. Bağımlı bir değişiklik yapılır 6. Bu değişiklik bir oturum için sorar 7. Oturum yöneticisi onu zaten açık oturum 8 eller. Çünkü bir yazma işlevi olduğu zaman oturumu kapatır 9. Kullanıcı, temassız yüklemenin ortaya çıkmasına neden olan ızgarayı kaydırmaya başlar. 10. Oturum açılmadığı için istisna atılıyor – joshlrogers
Kaydırma sırasında neden yükleme eksik oluyor? – Paco