NHibernate Aktuellen Session-Kontext-Problem

Ich habe vor kurzem zog aus der Verwendung einer ISession direkt auf einen umschlossenen ISession, Unit-of-Work-Art-Muster.

Ich zum testen verwendet, dies über SQL-Lite (in-memory). Ich habe eine einfache Hilfsklasse, die konfiguriert meine SessionFactory, erstellt eine ISession und baute dann das schema mit SchemaExport und dann wieder meine ISession und das schema gelebt, bis ich Schloss die Sitzung. Ich habe mich verändert diese leicht, so dass ich nun konfigurieren Sie eine SessionFactory, erstellen Sie eine ISession, erstellen Sie das schema, und übergeben Sie die Fabrik, um meine NHibernateUnitOfWork und Rückkehr zu meinem test.

var databaseConfiguration =
                SQLiteConfiguration.Standard.InMemory()
                .Raw("connection.release_mode", "on_close")
                .Raw("hibernate.generate_statistics", "true");

            var config = Fluently.Configure().Database(databaseConfiguration).Mappings(
                m =>
                {
                    foreach (var assembly in assemblies)
                    {
                        m.FluentMappings.AddFromAssembly(assembly);
                        m.HbmMappings.AddFromAssembly(assembly);
                    }
                });

            Configuration localConfig = null;
            config.ExposeConfiguration(x =>
                {
                    x.SetProperty("current_session_context_class", "thread_static"); //typeof(UnitTestCurrentSessionContext).FullName);
                    localConfig = x;
                });

            var factory = config.BuildSessionFactory();
            ISession session = null;

            if (openSessionFunction != null)
            {
                session = openSessionFunction(factory);
            }

            new SchemaExport(localConfig).Execute(false, true, false, session.Connection, null);

            UnitTestCurrentSessionContext.SetSession(session);

            var unitOfWork = new NHibernateUnitOfWork(factory, new NHibernateUTCDateTimeInterceptor());
            return unitOfWork;

Intern, NHibernateUnitOfWork braucht, um die ISession, die wurde verwendet, um das schema oder die in-memory-Datenbank nicht wirklich ein schema, so ist das die Methode aufruft, um die ISession.

private ISession GetCurrentOrNewSession()
        {
            if (this.currentSession != null)
            {
                return this.currentSession;
            }

            lock (this)
            {
                if (this.currentSession == null)
                {
                    //get an existing session if there is one, otherwise create one
                    ISession session;
                    try
                    {
                        session = this.sessionFactory.GetCurrentSession();
                    }
                    catch (Exception ex)
                    {
                        Debug.Write(ex.Message);
                        session = this.sessionFactory.OpenSession(this.dateTimeInterceptor);
                    }

                    this.currentSession = session;
                    this.currentSession.FlushMode = FlushMode.Never;
                }
            }

Das problem ist, dass this.sessionFactory.GetCurrentSession wirft immer eine exception, die sagen, dass die ICurrentSessionContext ist nicht registriert.

Ich habe versucht viele verschiedene Möglichkeiten, um die Eigenschaft und die verschiedenen Werte (wie Sie oben sehen können, "thread_static" und meine eigenen ICurrentSessionContext) aber keiner scheint zu funktionieren.

Jemand irgendwelche Ratschläge

InformationsquelleAutor BenCr | 2011-05-06
Schreibe einen Kommentar