2014-08-29 1 views
3

У меня возникла проблема, когда я отправляю сообщение в nServiceBus с полем данных с переменной длиной. nServiceBus использует NHibernate, чтобы создать таблицу с именемИзменение того, как nHibernate сохраняет данные Saga в nServiceBus

[NServiceBus].[PendingMentorEmailSagaData] 

из класса под названием PendingMentorEmailSagaData. Поле сообщения, однако, получает значение nvarchar (255), я ищу способ установить его на nvarchar (MAX).

Я пробовал использовать встроенный hbm-файл, но получаю ошибку «persistent class PendingMentorEmailSagaData not found».

Это, вероятно, означает, что я не могу понять, какой класс также задает файл.

НВМ файл:

<?xml version="1.0" encoding="utf-8" ?> 

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
     <class name="PendingMentorEmailSagaData"> 
     <id name="Id" /> 
     <property name="OriginalMessageId" /> 
     <property name="Originator" /> 
     <property name="PendingMentorEmailCommandId" /> 
     <property name="JobBoardCode" /> 
     </class> 
    </hibernate-mapping> 

PendingMentorEmailSagaData это имя класса данных саги.

+1

Мой вопрос упрощен как вы переопределяете функциональность nhibervate nservicebus так, как она создает свои таблицы в своей экспортной схеме. Я также попробовал добавить сборку и пространство имен. Ассемблером будет имя проекта, а пространство имен будет пространством имен в правом классе данных? – RandomUs1r

ответ

5
  1. Создайте файл PendingMentorEmailSagaData.hbm.xml в том же проекте, что сага существует на, например:
<?xml version="1.0" encoding="utf-8"?> 
    <hibernate-mapping xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:nhibernate-mapping-2.2"> 
     <class name="MY_NAMESPACE.PendingMentorEmailSagaData, MY_ASSEMBLY_NAME" table="PendingMentorEmailSagaData" dynamic-update="true" optimistic-lock="all"> 
     <id name="Id" type="Guid"> 
      <generator class="assigned" /> 
     </id> 
     <property name="Originator" /> 
     <property name="OriginalMessageId" /> 
     <property name="LargeText" type="StringClob" /> 
     </class> 
    </hibernate-mapping> 

2. Отметить этот файл как внедренный ресурс

+0

имеет смысл, в том числе больше информации о том, где найти класс, должен исправить это, однако я решил переключить передачи и перейти к понятию fluentnhibernate, который оказался примерно в 100 раз легче работать. – RandomUs1r

+0

@ RandomUs1r Мне было бы интересно узнать больше о том, как вам удалось использовать fluentnhibernate с NServiceBus? –

+0

Ну, мы попытались наследовать класс classmap класса, как файл hbm читается nhibernate на основе его функциональности. Однако не получилось, что это работает, реализовано обходное решение, когда данные сообщения не сохраняются в саге, но вызывается, когда сообщение нужно отправить. Это работает только потому, что мне нужно только отправить последнее сообщение, поэтому данные в db наиболее актуальны, но в следующий раз, когда я натыкаюсь на это, я собираюсь попробовать и реализовать classmap или файл hbm, чтобы не делать обходной путь. – RandomUs1r