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