Mapeo de NHibernate - uno a uno (o uno a cero)

NHibernatians!

Tengo una tabla [dbo]. [Wibble] y otra tabla [dbo]. [WibbleExtended].

[Wibble] es la tabla principal y [WibbleExtended] es una tabla opcional donde se almacenan algunos otros campos. Hay muchas menos entradas en la tabla [WibbleExtended] que en la tabla principal [Wibble]. Creo que esto se hizo en el día para curar algunos problemas de espacio (Wibble tiene muchas filas y WibbleExtened tiene muchas columnas).

La ID para cada tabla es la misma y proviene de una fuente externa.

Es decir.

[dbo].[Wibble].[WibbleId]

y

[dbo].[WibbleExtended].[WibbleId]

son idénticos y así se relacionan las dos tablas.

nótese bien No puedo cambiar el esquema. Estoy poniendo esto en un sistema heredado sobre el que casi no tengo control.

Buscar alrededor parece que los mapeos uno a uno son problemáticos y la sabiduría predominante es usar dos mapeos muchos a uno.

Mis asignaciones actualmente son:

<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>

Y

<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>

El problema con esto es que recibo errores como

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

He mirado a mi alrededor y esta parece la estrategia correcta, simplemente está cayendo en el obstáculo final.

¿Es el problema el generador de id? ¿Otro aspecto del mapeo?

Pastel de carne picada gratis para la respuesta correcta.

EDITAR: Ok, esto es lo que hice para resolver esto a través de @James Gregory.

Movió las pruebas unitarias de las pruebas WibbleExtended a la clase de prueba Wibble e hizo las modificaciones necesarias.

Se agregó lo siguiente a 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>

Se agregaron las propiedades correspondientes al Wibble POCO.

Eliminado todo el código relacionado con WibbleExtended.

Ejecutar pruebas, todas aprobadas, registradas. Compilación aprobada. Fui por una cerveza de Navidad (¡por lo tanto, han pasado un par de días antes de actualizar esto! :-))

Respuestas a la pregunta(3)

Su respuesta a la pregunta