Hola,

Veo que estas utilizando en todas las relaciones la configuracion de *
inverse=true*, sin embargo creo que no la estas utilizando bien al igual que
el on-delete=cascade.  Normalmente estas configuracion se usan para
relaciones bidireccionales en donde por ejemplo tu factura tiene muchos
detalles de factura Y cada detalle apunta en una relacion many-to-one a su
factura.  En este tipo de relaciones el inverse=true especifica quien se
hace cargo de la relacion si por ejemplo factura o detalle.  En tu caso no
veo relaciones bidireccionales entonces primero te sugiero que verifiques si
realmente necesitas este tipo de relaciones y si no estas muy segur creo que
eso significa que NO la necesitas asi que remuevelas de tu configuracion
 tanto el *inverse *como el on-delete="cascade".

Creo que eso solucionaria tu problema.

Una pregunta, tu generaste la base de datos desde NHibernate con
SchemaExport ?.

Prueba y nos cuentas.

Saludos,
Nestor Rodriguez

2010/9/25 J. Roberto Ramírez <[email protected]>

> Buenos días al foro,
>
> Tengo un problema que casi estoy seguro es de modelado, me gustaria que me
> ayudaran a decirme como resolverlo con nhibernate.
>
> Es simple, cuento con una entidad Factura la cual tiene su detalle de
> movimientos en stock al que llamaré Detalle y el cual mapeo de la siguiente
> manera:
>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Core"
> namespace="Core">
>   <class name="Factura" table="tblFacturas" lazy="false">
>     <property name="Folio" column="folio"></property>
>     <bag name="Detalle" inverse="true" cascade="all-delete-orphan"
> lazy="false" order-by="partida">
>       <key column="idFactura" on-delete="cascade"></key>
>       <one-to-many class="Detalle"></one-to-many>
>     </bag>
>   </class>
> </hibernate-mapping>
>
> El asunto es que el usuario del sistema puede asignarle comisiones a
> vendedores por Detalle de Factura y para soportar eso tengo la siguiente
> asociación y mapping:
>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Core"
> namespace="Core">
>   <class name="Detalle" table="tblDetalles" lazy="false">
>     <bag name="Comisiones" inverse="true" cascade="all-delete-orphan"
> lazy="true" order-by="consecutivo">
>       <key column="idDetalle" on-delete="cascade"></key>
>       <one-to-many class="Comision"></one-to-many>
>     </bag>
>   </class>
> </hibernate-mapping>
>
> El problema del que les habia hablado se presenta al momento de eliminar un
> Detalle de la Factura:
>
> foreach (Detalle ddToDelete in listToDelete) {
>   factura.Detalle.Remove(ddToDelete);
> }
>
> session.Update(factura);
>
> El cual me lanza la siguiente excepción:
>
> {"Instrucción DELETE en conflicto con la restricción REFERENCE
> \"FK_tblComisiones_tblDetalles\". El conflicto ha aparecido en la base de
> datos \"xxx\", tabla \"dbo.tblComisiones\", column 'idDetalle'.\r\nSe
> terminó la instrucción."}
>
> Error por una relación en la base de datos... ¿como podria darle soporte a
> este problema?
>
> Muchas gracias por leer y ayudar.
>
>
>
> --
> Roberto Ramírez
> www.robertoramírez.com.mx <http://www.xn--robertoramrez-5ib.com.mx>
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano

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