Escribí con éxito un sistema que contenía una orden con líneas de orden secundarias, usando actualizaciones en cascada de la orden para guardar las líneas de orden. En la siguiente iteración, quiero asociar las líneas de orden con una clase de despacho. Esto parecía bastante sencillo: agregue una columna DespatchID que admite nulos a la tabla de líneas de pedido como una clave de acceso a la tabla Despacho. Sin embargo, cuando agrego esto a la asignación y guardo el objeto de orden con los despachos no configurados en las líneas de orden, aparece el error "el objeto hace referencia a una instancia transitoria no guardada: guarde la instancia transitoria antes de enjuagar".NHibernate Error: guarde la instancia transitoria antes de enjuagar
Si elimino la asociación entre la línea de pedido y el envío, se guarda OK. Solo puedo suponer que el error se debe a que está intentando guardar el envío, que no existe.
Estas son las asignaciones de la clase (líneas orden se llama OrderProductAmount):
<class name="NHS.WebTeam.PandemicFluDistribution.Order, NHS.WebTeam.PandemicFluDistribution" table="[Order]" lazy="false" optimistic-lock="version" where="Deleted=0" >
<id name="ID" type="Int32" column="OrderID" unsaved-value="0">
<generator class="hilo">
<param name="table">NHibernateHiLo</param>
<param name="column">NextValue</param>
<param name="max_lo">100</param>
</generator>
</id>
<version column="version" name="Version"/>
<property name="Deleted" column="Deleted" />
<property name="DateEntered"></property>
<property name="RequiredDeliveryDate"></property>
<many-to-one name="Practice" column="PracticeID"></many-to-one>
<set name="OrderProductAmounts" access="field.camelcase-underscore" inverse="true" cascade="all-delete-orphan" lazy="true">
<key column="OrderID"></key>
<one-to-many class="NHS.WebTeam.PandemicFluDistribution.OrderProductAmount, PandemicFluDistribution" />
</set>
</class>
<class name="NHS.WebTeam.PandemicFluDistribution.OrderProductAmount, NHS.WebTeam.PandemicFluDistribution" table="OrderProductAmount" lazy="false" optimistic-lock="version" where="Deleted=0" >
<id name="ID" type="Int32" column="OrderProductAmountID" unsaved-value="0">
<generator class="hilo">
<param name="table">NHibernateHiLo</param>
<param name="column">NextValue</param>
<param name="max_lo">100</param>
</generator>
</id>
<version column="version" name="Version"/>
<property name="Deleted" column="Deleted" />
<many-to-one name="Order" column="OrderID"></many-to-one>
<many-to-one name="ProductAmount" column="ProductAmountID"></many-to-one>
<many-to-one name="Despatch" column="DespatchID" cascade="none" not-null="false"></many-to-one>
</class>
<class name="NHS.WebTeam.PandemicFluDistribution.Despatch, NHS.WebTeam.PandemicFluDistribution" table="Despatch" lazy="false" optimistic-lock="version" where="Deleted=0" >
<id name="ID" type="Int32" column="DespatchID" unsaved-value="0">
<generator class="hilo">
<param name="table">NHibernateHiLo</param>
<param name="column">NextValue</param>
<param name="max_lo">100</param>
</generator>
</id>
<version column="version" name="Version"/>
<property name="Deleted" column="Deleted" />
<property name="DateDespatched"></property>
<property name="RequiredDeliveryDate"></property>
<many-to-one name="Practice" column="PracticeID"></many-to-one>
<set name="OrderProductAmounts" access="field.camelcase-underscore" inverse="true" cascade="none" lazy="true">
<key column="DespatchID"></key>
<one-to-many class="NHS.WebTeam.PandemicFluDistribution.OrderProductAmount, PandemicFluDistribution" />
</set>
</class>
El código para crear la orden es esencialmente la siguiente:
Dim practice = ... get relevant Practice ...
Dim productAmount = ... get relevant ProductAmount ...
Dim newOrder as Order = new Order(practice)
newOrder.AddProductAmount(new OrderProductAmount(newOrder, productAmount)
OrderDAO.Save(newOrder)
¿Alguien tiene alguna idea?
Estoy seguro de que está haciendo referencia a una clase de envío aquí. Muéstreme el código donde se crea o carga y almacena la instancia ... –
Agregué una aproximación del código que crea el orden de la pregunta. Todavía no he escrito el bit que agrega el despacho a las líneas de pedido, así que no hubiera pensado que todavía habría una asociación entre ellos. –
Cuando crea el objeto Order, ¿qué valor asigna a la propiedad Despatch? Si no es un NULL, y en su lugar es un objeto Despatch con su Id = 0, creo que NHibernate arrojará esa excepción. –