2010-05-28 19 views
10

¿Los proxies nhibernate hacen algún trabajo inteligente para que el seguimiento de cambios sea eficiente? ¿O solo es compatible con lo que Entity Framework llama seguimiento de cambios basado en instantáneas?¿Cómo implementa NHibernate el seguimiento de cambios?

+0

¿Está hablando de registro de auditoría, donde se registran los cambios, o gestión de cambio completo con la capacidad de volver a las versiones anteriores de las entidades? – DanK

+0

Si la entidad tiene varias propiedades, ORM debe emitir una declaración de actualización a la base de datos con solo las propiedades modificadas. En LINQ TO SQL, sabe que las propiedades han cambiado o no a través de la interfaz INotifyPorpertyChanging/Changed (aunque no es un requisito, en cuyo caso recurre al seguimiento de cambios basado en instantáneas, es decir, compara cada propiedad para descubrir qué propiedades han cambiado) – Alice

Respuesta

12

Está basado en una instantánea.

Al cargar una entidad, su estado se almacena en la sesión como un objeto [].

Al enjuagar, el estado actual se convierte en un objeto [] y se compara con el estado original para determinar qué propiedades están sucias.

Esto es más eficiente por muchas razones. Una de ellas es que no necesita un proxy para realizar un seguimiento de los cambios. Otra es que, si configura una propiedad con un valor diferente y luego la revierte, la entidad se considerará no sucia, evitando así una llamada DB innecesaria.

9

NHibernate y EntityFramework realizan un seguimiento de diferentes maneras. Entity Framework rastrea los cambios en la entidad misma. NHibernate rastrea los cambios en la sesión.

El seguimiento de los cambios en la entidad requiere más memoria (porque está almacenando los valores anteriores y posteriores). Las entidades pueden conservar el seguimiento de cambios incluso después de desconectarse del ObjectContext.

El seguimiento de los cambios en la sesión es más eficiente en general, pero si desconecta una entidad de la sesión, pierde el seguimiento de cambios.

+0

¿Es correcta esta afirmación? Hasta donde yo sé, EF usa el llamado seguidor de cambios para rastrear cambios de entidades. No se incluye infraestructura de seguimiento de cambios en la entidad. – Andreas

Cuestiones relacionadas