2009-06-23 2 views
0

Aus irgendeinem Grund blockiert die Nhibernate, wenn ich versuche, auf die Sitzung zuzugreifen. Es wird die folgende Ausnahme ausgelöst:FluentNHibernate und die Sitzung nicht erkennen

Kein CurrentSessionContext konfiguriert (die Eigenschaft current_session_context_class festlegen)!

Bitte beachten Sie, dass ich keine XML zum Einrichten der Konfiguration verwende!

Ich eröffne die Sitzung in meinem Test:

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

      SetupContext(); 
      When(); 
     } 

und dann die aktuelle Sitzung Ich bin mit Repository zugreifen. Das Repository befindet sich in einer anderen DLL.

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; 
     } 

UPDATE:

In meiner BaseTest.cs Klasse Ich habe auch ein Teardown:

[TearDown] public void CleanUp() { _session.Dispose(); _transaction.Dispose(); }

Während des Debuggen scheint es, als ob CleanUp ausgelöst wird und das _session-Objekt beendet wird!

Ein weiteres Update:

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; 
     } 

Jetzt bekomme ich folgende Fehlermeldung:: Ich habe den folgenden Code beim Erstellen der Konfiguration hinzugefügt

keine Sitzung mit dem aktuellen Kontext gebunden

+0

Hat diese gelöst werden? – DevelopingChris

Antwort

2

Sie müssen Binden Sie die Sitzung an den aktuellen Kontext.

Im setup Methode:

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

Und in der teardown Methode:

var session = CurrentSessionContext.Unbind(SessionFactory); 
session.Dispose(); 
Verwandte Themen