NHibernate Actuel Contexte De Session Problème

J'ai récemment déménagé de l'utilisation d'un ISession directement à un enveloppé ISession, des unités de Travail type de modèle.

J'ai utilisé pour tester à l'aide de SQL Lite (en mémoire). J'ai une simple classe helper qui configure mon SessionFactory, a créé un ISession puis construit le schéma à l'aide de SchemaExport et est ensuite retourné mon ISession et le schéma vécu jusqu'à ce que j'ai fermé la session. J'ai changé un peu, de sorte que j'ai maintenant configurer une SessionFactory, créer un ISession, construire le schéma, et de passer de l'usine à ma NHibernateUnitOfWork et de retour que pour mon 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;

En interne, NHibernateUnitOfWork besoin pour obtenir le ISession qui a été utilisé pour créer le schéma ou de la base de données en mémoire ne sera pas réellement avoir un schéma, c'est la méthode qu'il appelle pour obtenir le 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;
                }
            }

Le problème est que this.sessionFactory.GetCurrentSession toujours déclenche une exception en disant que le ICurrentSessionContext n'est pas enregistré.

J'ai essayé des charges de différentes façons de définir la propriété et des valeurs différentes (comme vous pouvez le voir ci-dessus, "thread_static" et ma propre ICurrentSessionContext), mais aucune ne semble fonctionner.

Quelqu'un a des conseils

OriginalL'auteur BenCr | 2011-05-06