Tengo un problema. Imagínese este modelo de datos:nHibernate 2.0 - asociar una relación de identificación compuesta * y * de varios a uno provoca un error de "índice no válido"
[Person] table has: PersonId, Name1
[Tag] table has: TagId, TagDescription
[PersonTag] has: PersonId, TagId, IsActive
Desde [PersonTag]
no es sólo una simple tabla de muchos a muchos se unen, tengo las tres entidades creadas en NHibernate (exactamente como si estuvieran en el modelo de datos). PersonTag
, por lo tanto, necesita un composite-id, que he asignado a una clase como esta:
<composite-id name="PersonTagKey" class="PersonTagKey">
<key-property name="PersonId"></key-property>
<key-property name="TagId"></key-property>
</composite-id>
Quiero atravesar el gráfico de objetos y ser capaz de mirar a ambos los Person
y Tag
objetos de una recuperada PersonTag
objeto. Por lo tanto, no tengo propiedades en el objeto PersonTag
de hacer eso, asignada como esto:
<many-to-one name="Person" column="PersonId" lazy="proxy" cascade="none" class="Person"/>
<many-to-one name="Tag" column="TagId" lazy="proxy" cascade="none" class="Tag"/>
Cuando trato de crear un objeto PersonTag
y guardarlo, me sale un "índice n no válida para este SqlParameterCollection con Count = n " error. Sé que esto se debe a que he mapeado las propiedades PersonId
y TagId
dos veces, una para la identificación compuesta y una para la relación de varios a uno. Si no mapeo los objetos muchos a uno, todo funciona bien.
¿Hay alguna manera de que pueda tener una relación de identificación compuesta Y una relación de varios a uno basada en la misma columna modelada en la misma entidad nHibernate?
Por cierto, me encontré con el sub-elemento "clave de muchos a uno" en composite-id ... podría ser eso? –