2010-03-31 3 views
2

Je reçois l'erreur de folloinwg de NHibernate:NHibernate exception "La session est fermée! Nom de l'objet: '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) 

J'utilise NHibernate en service windows .net.
Je ne suis pas en mesure de tracer le problème d'excact pour l'exception. Cette exception se produit très souvent.
Tout le monde peut m'aider pour corriger cette exception?


NRK

+0

Oui .. J'ouvre la connexion. En fait je fais une application d'importation de fichiers, en ce que je fais l'insertion d'enregistrement par lots (200) avec la session et la validation de la session et ces enregistrements sont également disponibles en DB, mais après 2 ou 3 lots cela donne cette exception. Je ne suis pas capable de le comprendre. – nRk

Répondre

2

Comme l'erreur dit - il semble que vous essayez d'enregistrer un objet lorsque votre ISession est fermé. Êtes-vous sûr de l'ouvrir? Ou peut-être est-il fermé prématurément?

Mise à jour: Avez-vous vérifié les journaux de NHibernate?

+0

ressemble à cela, mais faire cascading = none a résolu le problème. – nRk

+0

Je suis content que vous ayez réussi. Si j'étais vous, je serais sûr de jeter un coup d'oeil aux journaux de nhibernate log4net, pour obtenir peut-être plus d'informations sur ce qui se passe, voir: http://stackoverflow.com/questions/743323/nhibernate-enabling- log4net – UpTheCreek

+0

Et ces journaux NHibernate sont O WH? – vapcguy

6

Je suppose que vous enveloppez votre session dans une construction utilisant plus d'une fois, quelque chose comme ci-dessous. Pouvez-vous poster une partie de votre code d'utilisation de session?

HTH,
Berryl

Wrong - la session est fermée après la première utilisation de construire:

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 
} 

meilleur cours de la session est fermée après son travail est fait

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

Nous avons eu ce même problème. La modification du pipeline géré du pool d'applications vers Classic a résolu le problème pour nous.

Questions connexes