2011-01-15 5 views
8

Ich versuche fließend mit Sitzung pro Anfrage zu verwenden. Ich folge einem "Rezept" von Nhibernate Kochbuch, aber es verwendet die Nhibernate Config-Datei.curresessioncontext fluent nhibernate wie geht das?

Ich bin mir nicht sicher, was besser ist, aber im Moment bleibe ich mit fließend config nur weil ich nicht wissen würde, wie die Nhibernate Config-Datei zu verwenden, fließende Zuordnung und Vanille Nhibernate Mapping (Hbm-Dateien).

namespace Demo.WebUI 
{ 
    public class MvcApplication : NinjectHttpApplication 
    { 
     public static ISessionFactory SessionFactory { get; private set; } 

     protected override void OnApplicationStarted() 
     { 
      SessionFactory = Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2008.ConnectionString(
        c => c.FromConnectionStringWithKey("test"))) 
       .Mappings(m => m.FluentMappings 
        .AddFromAssemblyOf 
        <Demo.Framework.Data.NhibernateMapping.UserMap>()) 
       .ExposeConfiguration(BuidSchema) 
       .BuildSessionFactory(); 
     } 

     protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      var session = SessionFactory.OpenSession(); 
      //CurrentSessionContext.Bind(session); 
     } 

     protected void Application_EndRequest(object sender, EventArgs e) 
     { 
      //var session = CurrentSessionContext.Unbind(SessionFactory); 
      SessionFactory.Dispose(); 
     } 
    } 
} 

Wie Sie im Begin_Request Tutorial die Bücher sehen

hatte
CurrentSessionContext.Bind(session); 

Allerdings, wenn ich diese verwenden sie einen Fehler wirft, da ich in Gebrauch die nhibernate Konfigurationsdatei nicht haben.

Also, wie kann ich es ändern, um fließende Konfiguration zu verwenden? Oder muss ich diesen Schritt nicht einmal machen? (Ist dies intern erledigt?)

Antwort

12

Sie müssen NHibernate mitteilen, wie der Sitzungskontext behandelt wird. Die folgende funktionieren könnte:

Fluently.Configure() 
     ... 
     .ExposeConfiguration(cfg => cfg.SetProperty(
             Environment.CurrentSessionContextClass, 
             "web") 

auch in keinem Zusammenhang mit dieser: Sie können die Session auf Endrequest sind zu entsorgen. Das ist ein Fehler.

+0

Können Sie auf Seiten erarbeiten bitte von „Endrequest ist ein Fehler "Ich folge nur, was in Nhibernate Kochbuch 3.0 getan wird. – chobo2

+0

Ah ich sehe was du meinst. Ya ich wollte die aktuelle Session nicht die Session Factory beenden (das wäre schlecht lol). – chobo2

+0

das habe ich gemeint. –

0

Wenn das Projekt Asp.Net Web site (nicht Web-Anwendung), in Global.asax sollten Sie, wie die Verwendung

NHibernate.Cfg.Environment.CurrentSessionContextClass