Hola, y en primer lugar gracias por tu ayuda.

Tienes razón, quería hacer un mapeo de muchos a muchos, pero luego me aparecieron más campos a añadir a esa entidad intermedia, así que decidí mapearla también.

La captura que he puesto era del diagrama de tablas de sql server. Y esta es una imagen del diagrama de clases que tengo:

http://img845.imageshack.us/img845/2892/23062011213613.png

También he utilizado el SchemaValidator como me indicaste, y me aparecieron un par de errores que ya he corregido. Ahora los mapeos son estos:

<class name="C" table="C" lazy="false">
<id column="Id" type="int" unsaved-value="0">
<generator class="identity"></generator>
</id>
<property name="Numero" length="20" type="string" not-null="true" unique="true"></property>
<property name="Duracion" type="int" not-null="true"></property>
<property name="FechaInicio" type="DateTime" not-null="true"></property>
<property name="FechaFin" type="DateTime" not-null="true"></property>
<property name="Activo" type="bool"></property>
<many-to-one name="Cliente" column="ClienteId" class="Cliente"></many-to-one>
<bag name="PC" table="PC" inverse="true">
<key column="CId"></key>
<one-to-many class="PC"></one-to-many>
</bag>
</class>

<class name="P" table="P" lazy="false">
<id column="Id" type="int" unsaved-value="0">
<generator class="identity"></generator>
</id>
<property name="Nombre" length="50" type="string" not-null="true" unique="true"></property>
<bag name="PC" table="PC" inverse="true">
<key column="PId"></key>
<one-to-many class="PC"></one-to-many>
</bag>
</class>

<class name="PC" table="PC" lazy="false">
<id column="Id" type="int" unsaved-value="0">
<generator class="identity"></generator>
</id>
<many-to-one name="C" column="CId" class="C"></many-to-one>
<many-to-one name="P" column="PId" class="P"></many-to-one>
<property name="Duracion" type="int" not-null="true"></property>
<bag name="V" table="Videos">
<key column="Id"></key>
<one-to-many class="V"></one-to-many>
</bag>
</class>

<class name="V" table="Videos" lazy="false">
<id column="Id" type="int" unsaved-value="0">
<generator class="identity"></generator>
</id>
<property name="Nombre" length="75" type="string" not-null="true"></property>
<property name="Ruta" length="150" type="string" not-null="true"></property>
<many-to-one name="C" column="CId" lazy="false"></many-to-one>
<many-to-one name="PC" column="PCId" class="PC"></many-to-one>
</class>

Pero me sigue apareciendo el error "Found shared references to a collection: VS.NH.C.PC".

Un saludo.

El 23/06/2011 17:06, Nestor Andres Rodriguez escribió:

Hola,

1) No existe un mapeo de muchos a muchos. PC esta mapeado como una "entidad" y no como una tabla para guardar la relacion de las entidades P y C.

2) En la tabla Videos no tienes la columna CID.

3) No existe la columna VID en en la tabla Videos.

4) Creeria que el <key column="VID"> en el mapeo de PC->Videos deberia ser <key column="PCID">, creeria que alli es donde tienes el problema porque quizas estas utilizando VID como llave principal para Videos y como Llave foranea para la coleccion PC->Videos

5) Estas haciendo un mapeo one-to-many bidireccional entre C->PC asi que el inverse ="true" haria falta en C->PC.

6) Tienes una relacion bidireccional entre PC y videos. Faltaria el Inverse="true" en la coleccion PC->Videos

-Estas seguro que enviaste el disenio de base de datos correcto?
- Utiliza el SchemaExport para generar tu base de datos y que no se presenten tantas inconsistencias. - O Utiliza un SchemaValidator para validar tu base de datos con respecto al mapeo. -Quizas podrias modificar tu disenio para no tener las entidades tan acopladas unas a otras. -Si tienes un disenio en terminos de clases podria ayudar a validar mejor tu mapeo.

Saludos,
Nestor Andres Rodriguez


--
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a