Cuál es la diferencia entre SaveOrUpdate y Save/Update en NHibernate. ¿Por qué no usarías siempre SaveOrUpdate? Además, ¿cuál es el sentido de SaveOrUpdateCopy?SaveOrUpdate Vs Actualizar y guardar en NHibernate
Respuesta
Capítulo 9 cubre todo esto mejor que yo:
http://nhibernate.info/doc/nh/en/index.html
Pero Cliff Notes:
Save()
toma un nuevo objeto sin un identificador y se une a la sesión. El objeto será INSERT
'd.
Update()
toma un objeto existente que tiene un identificador pero no está en la sesión y lo conecta a la sesión. El objeto será UPDATE
'd.
SaveOrUpdate()
mira el identificador y decide lo que es necesario en lo anterior.
SaveOrUpdateCopy()
es especial porque dice que tiene dos objetos con el mismo identificador: uno en la sesión y otro no. Si intenta y update
, el que no está en la sesión, se lanza una excepción normalmente (ahora está tratando de adjuntar dos objetos que representan el mismo objeto persistente a la sesión). SaveOrUpdateCopy()
copia el estado del objeto sin sesión al estado del objeto de sesión.
No estoy seguro de cómo vas a usar NH, pero para muchos casos todo lo que necesitas es Save()
. La sesión está haciendo TODO el trabajo necesario para saber qué tiene que actualizarse y simplemente Flush()
o Commit()
hace todo lo que necesita.
- 1. Hibernar saveOrUpdate() intenta guardar cuando debería actualizar
- 2. Hibernate comportamiento saveOrUpdate
- 3. NHibernate Cascade = guardar-actualización "
- 4. List vs Set vs Bag en NHibernate
- 5. vs Actualizar
- 6. NHibernate vs. EF 4.1+
- 7. NHibernate Error en la sesión. Guardar
- 8. ¿Cómo guardar y actualizar los valores en el archivo xml?
- 9. NHibernate - ISession vs. IStatelessSession
- 10. NHibernate Fluido vs. Atributos
- 11. Subsonic Vs NHibernate
- 12. NHibernate - createCriteria vs CreateAlias
- 13. NHibernate ISet Vs IList
- 14. Lightspeed vs NHibernate
- 15. NHibernate, transacciones y TransactionScope
- 16. NHibernate establece las propiedades automáticamente al guardar
- 17. Invalidar vs Actualizar
- 18. ¿Crear métodos para actualizar y guardar documentos con mangosta?
- 19. NHibernate vs LINQ to SQL
- 20. ¿Qué ganas al actualizar NHibernate 1.2?
- 21. NHibernate Component Mapping VS IUserType
- 22. NHibernate HQL vs CriteriaAPI vs QueryOver vs Linq. Rendimiento
- 23. ¿Cómo verificar la violación de restricción única en nHibernate y DDD antes de guardar?
- 24. Will Hibernate método saveOrUpdate delete children?
- 25. MS Entity Framework VS NHibernate y sus contribuciones derivadas (FluentNHibernate, Linq for NHibernate)
- 26. Cuál es la mejor manera de actualizar entidades en nhibernate
- 27. intento de crear un evento saveOrUpdate con entidad nula
- 28. DevExpress XPO vs NHibernate vs Marco de la entidad: cuestión actualización de base de datos
- 29. HasOne vs Referencias Mapping Fluido NHibernate
- 30. NHibernate Composite Key vs Composite Unique Constraint
Normalmente no necesita SaveOrUpdate() porque NHibernate realiza un seguimiento de los cambios en cada objeto cargado. Para actualizar un objeto use Session.Get(), haga que cambie y luego llame a Session.Flush(). –
¿Qué es más legible o intención revelador en el código a continuación: 'SaveOrUpdate()' o 'Flush()'/'Commit()'? ¿O no hace una diferencia (semántica o de otro tipo)? –
Es probable que no sea necesario enjuagar explícitamente su sesión. Si realiza una transacción o la sesión queda fuera de alcance/se descarta, los cambios se conservarán automáticamente (o antes si es necesario, por algún motivo, generación de id o similar). Flush es revelador de intenciones (para mí) cuando * necesitas * para forzar los cambios automáticamente, debido a la ioslación de lectura o algún otro esoterismo, y solo al ruido de lo contrario. Cualquiera que esté familiarizado con NH entenderá la 'Actualización' implícita de las entidades adjuntas también, por lo que tiendo a pensar lo mismo de las declaraciones explícitas' SaveOrUpdate' también. –