NHibernate “Could not initialize proxy – the owning Session was closed” Hatasi

NHibernate “Could not initialize proxy – the owning Session was closed” Hatasi

Nhibernate ile çalisiyorsunuz ve iliskilerle dolu bir veritabaniniz var. Kodunuzu yazarken haliyle nhibernate in size sagladigi avantajlari kullanmak istiyorsunuz ve classlarinizdan birinden türettiginiz bir nesnenizin iliskili oldugu nesnelere ulasmaya çalisiyorsunuz. Bu durumda alacaginiz hata baslikta da geçen “Could not initialize proxy – the owning Session was closed” hatasi olabilir.

Ogrenci ve Sinif adli iki classimiz ve Ogrenci classinda Sinif classina iliski oldugunu varsayalim. Ve bir ögrencinin sinifinin adi bilgisine ulasmaya çalisalim.

Ogrenci ogrenci1 = getOgrenci(ogrenciNo);

Label1.Text = ogrenci1.Sinifi.SinifAdi;

.

Standart yollarla olusturulmus class ve mapping dosyalarinizla bu durumda hata almaniz muhtemel. Ve bu sorunu 2 yolla asabilirsiniz.

1.       GetOgrenci() fonksiyonuna su eki yaparak:

 

ISession s = HibernateSession.GetSession();

 

ICriteria kriter = s.CreateCriteria(typeof(Ogrenci));

 

kriter.Add(new EqExpression("OgrenciNo", ogrenciNo));

 

kriter.SetFetchMode("Sinifi", FetchMode.Join);

 

2.       Ya da Ogrenci mapping dosyaniza su eki yaparak:

<many-to-one name="Sinif" column="Sinif" class="Sinif" fetch="join" />

Peki, Sinif classinin Ogretmen classiyla SinifOgretmeni alani üzerinden iliskili oldugunu ve bizim su sekilde bu alana ulasmak istedigimizi düsünelim:

Ogrenci ogrenci1 = getOgrenci(ogrenciNo);

Label1.Text = ogrenci1.Sinifi.SinifAdi;

Label2.Text = ogrenci1.Sinifi.SinifOgretmeni.Adi;

Ilk yöntemi kullandiginiz takdirde burada yine ayni hataya düseceksiniz. Ancak 2. yöntem sorunu asmaniza yardimci olacaktir.

Eklemek istedigim son nokta, bu tür kullanimlarla nhibernate in ilgili tüm verileri çektigini ve veri yogunlugunun ve performans ihtiyacinin göz önünde tutularak bu yöntemlerin kullanilmasi gerektigidir.

4 thoughts on “NHibernate “Could not initialize proxy – the owning Session was closed” Hatasi

  1. Kesinlikle haklisiniz ama içinden böle bir makale gelmis ve böyle yazmis ders amaçli degil çözüm amaçli yazilmis bir makalede fazlasini beklememek gerekir.Çok yakin zamanda çikicak olan visualstudio.gen.tr sitesi bu isteklerinize türkçe yanit olur insallah.

  2. NHibernate ‘e baslangiç ile ilgili bir makale de yazar misnz. Bu makale bahsedilen hatayi asmadikça çok sey ifade etmez. Tesekkürler..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir