2010-12-16 25 views
7

¿NHibernate siempre genera actualizaciones para todas las columnas?NHibernate genera una declaración de actualización para todas las columnas

 
public class Person 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string Address { get; set; } 
} 

Person p = Session.Load(1); 
p.Name = "New Name"; 

Session.Flush();//Update for all columns, but I change only Name 

¿Es normal el comportamiento de NHibernate o mi error? Uso Fluent NHibernate y AutoMapping.

+1

Andy, si alguna de sus otras preguntas ha encontrado una solución de la respuesta de otra persona, acéptelas para que pueda ayudar a otras personas que tengan la misma pregunta que la suya. –

Respuesta

10

Ese es el comportamiento predeterminado, pero puede hacer que NH actualice las columnas modificadas solo agregando dynamic-update="true" a su asignación <class>.

+0

snap, me gané :) –

+0

+1 Para mencionar 'dynamic-update' en el mapeo' '. Me había olvidado de eso desde la última vez que utilicé NHibernate. =) –

+0

@Mauricio ¿es una competencia a quién sabe más? Mirá que tengo años de experiencia ... ;-) –

-2

NHibernate siempre actualiza todas las columnas mapeadas. Esto no debería ser un problema si las otras columnas no cambian, ya que en la actualización los datos se han bombeado previamente desde el almacén de datos subyacente, por lo que, básicamente, solo restablece los valores de la columna a sus propios valores originales. No hay problema al respecto

Si desea anular este comportamiento, debe implementar la IInterceptor interfaz.

+2

Esto está mal. Ver mi respuesta –

+0

Cuál es la diferencia entre "Ese es el comportamiento predeterminado [...]" y "NHibernate siempre actualiza todas las columnas mapeadas [...]". Estas dos oraciones son lo mismo para mí. Entonces, no se merecen votos negativos aquí. Además, esta 'actualización dinámica' podría realizarse implementando la interfaz' IInterceptor'. Entonces, esto no está mal en mi opinión. Aunque mi respuesta podría no decir acerca de 'dynamic-update', que humildemente reconozco que es un enfoque más elegante, el downvote es inmerecido. –

+2

La primera frase implica que puede cambiar el comportamiento fácilmente (simplemente cambiando el valor predeterminado 'false' a' true'), mientras que el último implica que no puede, o que necesita trabajar mucho para que haga algo diferente. No tengo idea de cómo hacerlo con un intérprete II, pero es una opción de mapeo que no es necesaria. Solo bajé la votación porque la respuesta fue engañosa, no lo tomes personalmente :-) –

Cuestiones relacionadas