Tengo un mapeo unidireccional muy simple. ver más abajo:NHibernate todavía publica la actualización después de la inserción
public ContactMap()
{
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Name);
References(x => x.Device);
HasMany(x => x.Numbers)
.Not.Inverse()
.Not.KeyNullable()
.Cascade.AllDeleteOrphan()
.Not.LazyLoad()
.Fetch.Subselect();
Table("Contacts");
}
public PhoneNumberMap()
{
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Number);
Table("ContactNumbers");
}
De acuerdo con esta post después nhibernate 3 y superior, tecla que no anulable ajuste debe solucionar el problema de inserción-actualización (El problema cuando NHibernate emite un inserto con clave externa configurado en nulo y luego una actualizar para actualizar la clave externa para corregir el valor), pero este no es el caso para mí. Cuando me puse la llave como no anulable, NHibernate emite una instrucción de inserción correcta
INSERT INTO ContactNumbers
(Number,
ContactId)
VALUES ('(212) 121-212' /* @p0 */,
10 /* @p1 */);
Como se puede ver, se inserta el campo ContactId, pero después de eso, todavía emite instrucción de actualización
UPDATE ContactNumbers
SET ContactId = 10 /* @p0 */
WHERE Id = 34 /* @p1 */
Así que para aclarar el problema NHibernate inserta la fila de contacto con la clave externa asignada correctamente y luego de eso, emite una declaración de actualización para actualizar la clave externa (ContactId) que es redundante.
¿Cómo puedo deshacerme de esta declaración de actualización redundante? Gracias.
Por cierto, estoy usando la última versión de NHibernate y Fluidez NHibernate. La base de datos es SQLite
Cuando todas las esperanzas desaparecieron, llegaste: D. Simple, claro y funciona a la perfección. Incluso reemplazó la operación de Actualización/Eliminación con una sola eliminación. Maldita sea, no sabes cuán agradecido estoy. Este fue un tema importante que muchos desconocen. Gracias hazzik. – Davita
Sí, deberíamos actualizar nuestra documentación, pero es un trabajo enorme y aburrido :( – hazzik
Entiendo, gracias a Dios tenemos SO :-) – Davita