Muchas gracias Diego, efectivamente la solución fue modificar la FK.


Roberto Ramírez
http://www.robertoramirez.com.mx


2010/9/25 Diego Mijelshon <[email protected]>

> Es muy sencillo. En esta línea:
>       <key column="idDetalle" on-delete="cascade"></key>
> ...le estás diciendo a NH que la base se encarga de hacer el cascade (lo
> cual es correcto y eficiente).
> Sin embargo, y al no haber generado el esquema con NH, esa relación NO está
> definida como ON DELETE CASCADE en la base y por eso te da ese error.
> Solución: modificar la FK para que sea ON DELETE CASCADE.
>
>     Diego
>
>
> 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
>

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