Вам не хватает скобок в конце оператора if.

но я перешел от использования ISession напрямую к шаблону типа ISession, Unit-of-Work.

Я использовал для проверки этого с помощью SQL Lite (в памяти). У меня есть простой вспомогательный класс, который настраивает мой SessionFactory, создал ISession, а затем построил схему с использованием SchemaExport, а затем возвратил мой ISession, и схема проживала до тех пор, пока я не закрыл сеанс. Я немного изменил это так, что теперь я настраиваю SessionFactory, создаю ISession, строю схему, передаю фабрику моему NHibernateUnitOfWork и возвращаю это в свой тест.

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;

Внутренне NHibernateUnitOfWork должен получить ISession, который использовался для создания схемы, или база данных в памяти фактически не будет иметь схемы, так что это метод, который он вызывает для получения 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;
                }
            }

Проблема в том, чтоthis.sessionFactory.GetCurrentSession всегда выдает исключение, сказав, чтоICurrentSessionContext не зарегистрирован

Я пробовал множество разных способов установить свойство и разные значения (как вы можете видеть выше, "thread_static" и мой собственныйICurrentSessionContext) но никто, похоже, не работает.

Кто-нибудь получил любой совет

Ответы на вопрос(1)

Ваш ответ на вопрос