2010-03-31 3 views
2

Я получаю ошибку folloinwg из NHibernate:Исключение NHibernate «Сессия закрыта! Имя объекта:« ISession ».

System.ObjectDisposedException: Session is closed! Object name: 'ISession'. 
    at NHibernate.Impl.AbstractSessionImpl.ErrorIfClosed() 
    at NHibernate.Impl.AbstractSessionImpl.CheckAndUpdateSessionStatus() 
    at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event) 
    at NHibernate.Impl.SessionImpl.Save(Object obj) 

Я использую NHibernate в .net службы окон.
Я не могу отследить проблему исключения для исключения. Это исключение происходит очень часто.
Любой может помочь мне в этом, чтобы исправить это исключение?


NRK

+0

Да .. Я открываю соединение. На самом деле я делаю приложение импорта файлов, в котором я делаю запись в пакетном режиме (200) с сеансом и совершая сеанс, и эти записи также доступны в БД, но после 2 или 3 партий это исключение. Я не могу понять это. – nRk

ответ

2

Как говорит ошибка - это выглядит, как вы пытаетесь сохранить объект, когда ваш ISession закрыт. Вы уверены, что открываете его? Или, возможно, это закрывается преждевременно?

Обновление: Вы проверили журналы NHibernate?

+0

выглядит аналогично этому, но создание каскадного = никто не исправил проблему. – nRk

+0

Рад, что у вас это работает. Если бы я был вами, я бы обязательно взглянул на журналы журнала nhibernate log4net, чтобы получить дополнительную информацию о том, что происходит, см .: http://stackoverflow.com/questions/743323/nhibernate-enabling- log4net – UpTheCreek

+0

И эти журналы NHibernate являются ГДЕ? – vapcguy

6

Я предполагаю, что вы обертываете свою сессию в используемой конструкции несколько раз, что-то вроде ниже. Можете ли вы опубликовать часть кода использования сеанса?

НТН,
Berryl

Wrong - сессия закрыта после первого использования сооружать:

using(var session = _sessionFactory.GetCurrentSession() 
using(var tx = _session.BeginTransaction(){ 
    ... do something 
    tx.Commit(); 
} 


using(var session = _sessionFactory.GetCurrentSession() 
using(var tx = _session.BeginTransaction(){ 
    ... do something else 
} 

лучше- сессии закрыта после того, как это дело сделано

var session = _sessionFactory.GetCurrentSession(); 

using(var tx = _session.BeginTransaction(){ 
    ... do something 
    tx.Commit(); 
} 


using(var tx = _session.BeginTransaction(){ 
    ... do something else 
    tx.Commit() 
} 
session.Close() 
0

У нас была такая же проблема. Изменение пула приложений в управляемом трубопроводе в классическом режиме решило его для нас.

Смежные вопросы