2011-01-15 13 views
8

Sto cercando di usare fluentemente con sessione per richiesta. Sto seguendo una "ricetta" dal ricettario nhibernate, tuttavia utilizza il file di configurazione nhibernate.currentsessioncontext fluente inibire come si fa?

Non sono sicuro di ciò che è meglio, ma in questo momento sto mantenendo una configurazione fluida solo perché non saprei come impostare il file di configurazione di Nibernate per utilizzare la mappatura fluente e la mappatura della vaniglia nibernata (file 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(); 
     } 
    } 
} 

Come si può vedere nel Begin_Request l'esercitazione libri avevano

CurrentSessionContext.Bind(session); 

Tuttavia, se io uso questo genera un errore dal momento che non ho il file di configurazione in uso NHibernate.

Quindi, come posso cambiarlo per utilizzare la configurazione fluente? Oppure non ho nemmeno bisogno di fare questo passo? (Cioè è fatto internamente?)

risposta

12

È necessario dire a NHibernate come gestire il contesto di sessione. Quanto segue potrebbe funzionare:

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

Inoltre, estranei a questo: si sta disponendo l'SessionFactory sul EndRequest. Questo è un errore

+0

Potete per favore approfondire la parte di "EndRequest è un errore "Sto solo seguendo ciò che è stato fatto nel ricettario nhibernate 3.0. – chobo2

+0

Ah capisco cosa intendi. Ya intendevo terminare la sessione corrente non quella della sessione (sarebbe un brutto lol). – chobo2

+0

questo è quello che intendevo. –

0

Se il progetto è Asp.Net sito web (non applicazione web), in Global.asax si dovrebbe usare come quello

NHibernate.Cfg.Environment.CurrentSessionContextClass