NHibernate - Невозможно установить свойство ConfigurationCache после вызова Init - PullRequest
2 голосов
/ 09 сентября 2011

В моем проекте S # arp Arch 2.0 я общаюсь с 2 базами данных.Это прекрасно работает локально с ASP.Net Development Server (VS 2010) и проходит модульные тесты, требующие общения с любой из баз данных.

Следующим шагом было опубликовать проект (используя встроенную в VS опцию меню «Опубликовать»).) на внутренний сервер разработки (Windows Server 2008 R2) и запустите эту штуку на реальном сервере, где люди смогут его увидеть.

Теперь я получаю исключение, показанное в заголовке при попытке запуститьприложение.Исключение выдается в новой строке NHibernateConfigurationFileCache () ниже:

private void InitialiseNHibernateSessions()
    {
        NHibernateSession.ConfigurationCache = new NHibernateConfigurationFileCache();

        NHibernateSession.InitStorage(this.webSessionStorage);

        NHibernateSession.AddConfiguration(NHibernateSession.DefaultFactoryKey,
            new[] { Server.MapPath("~/bin/SRN2.Infrastructure.dll") },
            new AutoPersistenceModelGenerator().Generate(),
            Server.MapPath("~/NHibernate.config"),
            null, null, null);


        NHibernateSession.AddConfiguration(SRN2.Infrastructure.DataGlobals.OTHER_DB_FACTORY_KEY,
            new string[] { Server.MapPath("~/bin/SRN2.Infrastructure.dll") },
            new AutoPersistenceModelGenerator().Generate(),
            Server.MapPath("~/NHibernate-OTHER.config"),
            null, null, null);

    }

Трассировка стека:

[InvalidOperationException: Cannot set the ConfigurationCache property after calling Init]
   SharpArch.NHibernate.NHibernateSession.set_ConfigurationCache(INHibernateConfigurationCache value) +105
   SRN2.Web.Mvc.MvcApplication.InitialiseNHibernateSessions() in C:\code\SRN2-Sharp2\trunk\Solutions\SRN2.Web.Mvc\Global.asax.cs:122
   SharpArch.NHibernate.NHibernateInitializer.InitializeNHibernateOnce(Action initMethod) +116
   SRN2.Web.Mvc.MvcApplication.Application_BeginRequest(Object sender, EventArgs e) in     C:\code\SRN2-Sharp2\trunk\Solutions\SRN2.Web.Mvc\Global.asax.cs:71
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Джон прав, похоже, ваш метод InitialiseNHibernateSessions вызывается несколько раз. Вам не нужно использовать кеш конфигурации, вы пытались отключить его?

Конфигурация NHibernate кэшируется в файл, чтобы улучшить время запуска. Если конфигурация не изменилась, она загружается из файла кэша. Расположение файла кэша по умолчанию - системная папка временных файлов (например, Path.GetTempPath ()).

Если у вас нет прав доступа к файлам или вам не нужно кэширование конфигурации, просто удалите или закомментируйте строку, которая инициализирует кэш конфигурации, то есть эту строку:

NHibernateSession.ConfigurationCache = new NHibernateConfigurationFileCache();
0 голосов
/ 15 января 2015

Эта ошибка возникала для одного приложения примерно каждый месяц или два месяца в течение длительного периода.Я не смог исправить это навсегда, но обнаружил, что следующая процедура устраняет ошибку для:

  1. Удалите временные файлы кэша конфигурации;они должны находиться в папке временных файлов Windows, и для каждой базы данных должен быть файл (например, DatabaseName - 1973822310.bin ), а другой файл с именем, подобным nhibernate.current_session - 1973822310.bin.
  2. Перезапустите веб-сайт IIS для вашего приложения.
  3. Перезапустите пул приложений для вашего приложения.
...