2011-01-15 14 views
8

Próbuję używać płynnie z sesją na żądanie. Postępuję zgodnie z "receptą" z książki kucharskiej nhibernate, jednak używa ona pliku konfiguracyjnego nhibernate.currentsessioncontext płynnie nhibernate jak to zrobić?

Nie jestem pewien, co jest lepsze, ale teraz trzymam się płynnej konfiguracji tylko dlatego, że nie wiedziałbym, jak ustawić plik konfiguracyjny nhibernate, aby korzystać z płynnego mapowania i mapowania nhibernate (pliki hbm).

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

Jak widać w Begin_Request samouczek książki miał

CurrentSessionContext.Bind(session); 

Jednak jeśli mogę użyć tego rzuca błąd, ponieważ nie mają NHibernate plik konfiguracyjny w użyciu.

Jak mogę to zmienić, aby używać płynnej konfiguracji? Czy nie muszę nawet wykonywać tego kroku? (Tzn. Czy odbywa się to wewnętrznie?)

Odpowiedz

12

Musisz poinformować NHibernate, jak radzić sobie z kontekstem sesji. Poniższa może działać:

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

Ponadto, niezwiązane z tego: pozbywasz się SessionFactory na EndRequest. To jest błąd.

+0

Czy należy opracować w ramach „EndRequest jest błędem "Podążam za tym, co robi się w nhibernate cookbook 3.0. – chobo2

+0

Ah Widzę, co masz na myśli. Miałem zamiar zakończyć obecną sesję, a nie fabrykę sesji (to byłoby złe lol). – chobo2

+0

o to mi chodziło. –

0

Jeśli projekt jest strona internetowa Asp.Net (nie aplikacja internetowa), w Global.asax należy używać jak ten

NHibernate.Cfg.Environment.CurrentSessionContextClass