Отображение NHibernate - один к одному (или один к нулю)

NHibernatians!

У меня есть таблица [dbo]. [Wibble] и другая таблица [dbo]. [WibbleExtended].

[Wibble] - это основная таблица, а [WibbleExtended] - необязательная таблица, в которой хранятся некоторые другие поля. В таблице [WibbleExtended] гораздо меньше записей, чем в основной таблице [Wibble]. Я думаю, что это было сделано в тот же день, чтобы вылечить некоторые проблемы с пространством (Wibble имеет много строк, а WibbleExten имеет много столбцов).

Идентификатор для каждой таблицы одинаков и происходит из внешнего источника.

То есть

[dbo].[Wibble].[WibbleId]

а также

[dbo].[WibbleExtended].[WibbleId]

идентичны и так связаны две таблицы.

Нотабене Я не могу изменить схему. Я перевожу это на унаследованную систему, которую почти не контролирую.

Поиск вокруг кажется, что сопоставления один-к-одному проблематичны, и преобладает мудрость - использовать два сопоставления много-к-одному.

Мои отображения в настоящее время:

<class name="Wibble" table="Wibble" >
   <id name="Id" column="WibbleId" type="Int32">
      <generator class="assigned"/>
   </id>

   <many-to-one name="WibbleExtended" class="WibbleExtended" column="WibbleId" not-null="false" cascade="all"/>
</class>

А также

<class name="WibbleExtended" table="WibbleExtended" >
   <id name="Id" column="WibbleId" type="Int32">
        <generator class="assigned" />
   </id>

   <many-to-one name="Wibble" class="Wibble" column="WibbleId" not-null="true" />     
 </class>

Проблема в том, что я получаю такие ошибки, как

System.IndexOutOfRangeException: Invalid index n for this SqlParameterCollection with Count=n.

Я оглянулся вокруг, и это похоже на правильную стратегию, она просто падает на последнее препятствие.

Проблема в генераторе идентификатора? Другой аспект картирования?

Бесплатный мясной пирог для правильного ответа.

РЕДАКТИРОВАТЬ: Хорошо - вот что я сделал, чтобы решить эту проблему с помощью @James Gregory.

Переместил модульные тесты из тестов WibbleExtended в класс тестов Wibble и внес необходимые изменения.

Добавлено следующее в Wibble.hbm.xml

<join table="WibbleExtended" optional="true">
     <key column="WibbleId"/>
     <property name="Blah1" column="Blah1" type="String" length="2000" not-null="false" />
     <property name="Blah2" column="Blah2" type="String" length="1000" not-null="false" />    
</join>

Добавлены соответствующие свойства в Wibble POCO.

Удалил весь код, относящийся к WibbleExtended.

Выполнить тесты, все пройдено, проверено. Сборка пройдена. Пошел на рождественское пиво (следовательно, прошло несколько дней, прежде чем я обновил это! :-))

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

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