8 Stimmen

currentsessioncontext fluent nhibernate wie geht das?

Ich versuche, Fluent mit Session per Request zu verwenden. Ich folge einem "Rezept" aus dem nhibernate Kochbuch, aber es verwendet die nhibernate Konfigurationsdatei.

Ich bin mir nicht sicher, was besser ist, aber im Moment bleibe ich bei fluent config, weil ich nicht weiß, wie ich die nhibernate-Konfigurationsdatei einstellen kann, um fluent mapping und vanilla nhibernate mapping (hbm-Dateien) zu verwenden.

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 in der Begin_Request sehen können, hatte das Bücher-Tutorial

CurrentSessionContext.Bind(session);

Wenn ich dies jedoch verwende, tritt ein Fehler auf, da ich die nhibernate-Konfigurationsdatei nicht verwendet habe.

Wie ändere ich es also, um eine fließende Konfiguration zu verwenden? Oder muss ich diesen Schritt gar nicht ausführen (d. h. wird er intern durchgeführt)?

13voto

Diego Mijelshon Punkte 52110

Sie müssen NHibernate mitteilen, wie der Sitzungskontext behandelt werden soll. Das Folgende könnte funktionieren:

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

Außerdem, ohne Bezug zu diesem Thema: Sie entsorgen die SessionFactory bei EndRequest. Das ist ein Fehler.

0voto

himyata Punkte 338

Wenn es sich bei Ihrem Projekt um eine Asp.Net-Website (keine Webanwendung) handelt, sollten Sie in Global.asax Folgendes verwenden

NHibernate.Cfg.Environment.CurrentSessionContextClass

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X