NHibernatians!
У меня есть таблица [dbo]. [Wibble] и другая таблица [dbo]. [WibbleExtended].
[Wibble] - это основная таблица, а [WibbleExtended] - необязательная таблица, в которой хранятся некоторые другие поля. В таблице [WibbleExtended] гораздо меньше записей, чем в основной таблице [Wibble]. Я думаю, что это было сделано когда-то, чтобы вылечить некоторые проблемы с пространством (Wibble имеет много строк, а WibbleExten имеет много столбцов).
Идентификатор для каждой таблицы одинаков и поступает из внешнего источника.
1009 * Т.е. *
[dbo].[Wibble].[WibbleId]
и
[dbo].[WibbleExtended].[WibbleId]
идентичны и так связаны две таблицы.
N.B. Я не могу изменить схему. Я перевожу это на унаследованную систему, которую почти не контролирую.
Поиск вокруг кажется, что сопоставления один-к-одному проблематичны, и преобладает мудрость - использовать два сопоставления много-к-одному.
Мои отображения в настоящее время:
<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.
Запустить тесты, все пройдено, проверено. Сборка пройдена. Пошел на рождественское пиво (поэтому прошло пару дней, прежде чем я обновил это!: -))