2009-06-23 7 views
0

Pour une raison quelconque, le Nhibernate est choquant lorsque j'essaie d'accéder à la session. Il lève l'exception suivante:FluentNHibernate et ne pas reconnaître la session

Aucun CurrentSessionContext configuré (définissez la propriété current_session_context_class)!

Veuillez noter que je n'utilise pas XML pour configurer la configuration!

J'ouvre la session dans mon test:

[SetUp] 
     public void Initialize() 
     { 
      _session = GetSessionFactory().OpenSession(); 
      _transaction = _session.BeginTransaction(); 

      SetupContext(); 
      When(); 
     } 

et je me sers du référentiel pour accéder à la session en cours. Le dépôt est dans une DLL différente.

public void Save(Category newCategory) 
     { 
      var session = SessionFactory.GetSession(); 
      session.SaveOrUpdate(newCategory); 
     } 





    public static ISession GetSession() 
     { 
      var session = _sessionFactory.GetCurrentSession(); 

      if (session == null) 
       return _sessionFactory.OpenSession(); 

      return session; 
     } 

MISE À JOUR:

Dans ma classe BaseTest.cs J'ai aussi un désassemblage:

[TearDown] CleanUp public void() { _session.Dispose(); _transaction.Dispose(); Pendant le débogage, il semble que le CleanUp est en train d'être déclenché et de tuer l'objet _session!

Une autre mise à jour: J'ai ajouté le code suivant lors de la construction de la configuration:

public static ISessionFactory CreateSessionFactory() 
     { 
      _sessionFactory = 
       Fluently.Configure().Database(
        MsSqlConfiguration.MsSql2000.ConnectionString(
         c => c.FromConnectionStringWithKey("ConnectionString"))) 
         .Mappings(m => 
     m.FluentMappings.AddFromAssemblyOf<Category>()) 
     **.ExposeConfiguration(x => 
     { 
      x.SetProperty("current_session_context_class", 
    "thread_static"); 
     })** 
     .BuildSessionFactory(); 

      return _sessionFactory; 
     } 

Maintenant, je reçois l'erreur suivante:

Aucune session liée au contexte actuel

+0

Est-ce que ce seront résolus? – DevelopingChris

Répondre

2

Vous devez lier la session au contexte actuel.

Dans la méthode setup:

var session = SessionFactory.OpenSession(); 
CurrentSessionContext.Bind(session); 

Et dans la méthode teardown:

var session = CurrentSessionContext.Unbind(SessionFactory); 
session.Dispose(); 
Questions connexes