2010-03-26 4 views
5

Давайте рассмотрим это с первого взгляда: я знаю, что SessionFactory является неизменным - я пытаюсь изменить конфигурацию во время выполнения и восстановить ISessionFactory.NHibernate: Как перенастроить сопоставления во время выполнения?

В частности, у меня есть сопоставленный клиент, который будет иметь некоторые поля, добавленные к его узлу динамических компонентов во время выполнения. Я хотел бы сделать что-то вроде этого

var newSessionFactory = previousConfiguration 
    .RemoveClassMapping(typeof(Customer)) 
    .AddXmlString(newMappingForCustomer) 
    .BuildSessionFactory(); 

Однако, я не вижу очевидный способ, чтобы удалить отображение, есть все, что я могу сделать короткий регенерировать всю конфигурацию?

+0

На самом деле это не свободный NHibernate вопрос, и я предпочел бы, чтобы не принимать зависимость поры до времени, но я возьму его, если потребуется. –

ответ

1

Невозможно. Вам нужно будет восстановить Configuration.

Мое первоначальное предложение состояло в том, чтобы вы выбрали другую стратегию для своей модели.

Однако, если вы решили пойти с этим :-), вы можете:

  • Создать "частичный" Configuration (который не включает в себя Customer)
  • сериализовать его к MemoryStream
  • Добавить «базовый» Customer отображение, при необходимости
  • Создание временного SessionFactory
  • Получить любую информацию, вы пе ред к карте Customer
  • Deserialize ваш спас Configuration
  • Добавьте Customer отображение и создать свой окончательный SessionFactory
+0

Какая другая стратегия Диего? Если к динамическим компонентам добавлены поля, а сопоставленные столбцы добавляются к базам данных во время выполнения (хотя и несколько нечасто), похоже, что регенерация SessionFactory будет на сегодняшний день наиболее простой. –

+0

Различные стратегии не добавляют поля к базе данных во время выполнения. Вместо этого сохраните отдельную таблицу с вашими пользовательскими определениями атрибутов, а другую с вашими значениями настраиваемых атрибутов. –

+0

Да, это то, что я изначально предлагал, но эта стратегия убивает как производительность, так и прежнюю совместимость, не так ли? Я немного удивлен, что NH не был разработан с учетом этого сценария. Это не так редко. Я, конечно, понимаю, что важна неизменность SessionFactory, но кто волнуется, если класс конфигурации нарезается дюжиной разных способов, если вы собираетесь регенерировать фабрику в любом случае. –

Смежные вопросы