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
