2012-07-29 16 views
24

Duplicar posible:
Entity Framework 4 - AddObject vs Attach¿Qué hace exactamente Attach() en Entity Framework?

he visto el uso de adjuntar un par de veces, sobre todo cuando la manipulación de los modelos.

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    context.SaveChanges(); 
} 

Por el contexto parece que sólo se ejecuta una UPDATE contra un registro en EntityFrameworks, pero también lo veo utiliza en DELETE declaraciones. Entonces, ¿puedo suponer que solo obtiene un puntero a la base de datos?

Podría alguien señalarme en la dirección correcta, lo he buscado en Google por un tiempo y aunque no aparece vacío, no puedo encontrar ninguna buena explicación de lo que hace (a partir de una visión general, e internamente)

+0

Ver [esta cuestión] (http://stackoverflow.com/q/3920111/406903) y aceptaron la respuesta sobre 'Attach' y' AddObject'. – hmqcnoesy

+1

Gracias @hmqcnoesy se perdió esa :) votó para cerrar como duplicado. –

Respuesta

36

Así como un punto de interés el código que has publicado no hace nada

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    context.SaveChanges(); 
} 

Todo esto hace es unir la entidad a la gráfica de seguimiento No realice modificaciones en la entidad y guardarlo.

Los cambios realizados en el objeto antes de adjuntar son ignorados en el guardar

Lo que sería más interesante es si realmente ha modificado un ejemplo de propiedad:

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    client.Name = "Bob"; 
    context.SaveChanges(); 
} 
+1

Interesante, veo que solo cambia después de haber sido adjuntado. Perdón por la diminuta tangente, ¿hay alguna manera limpia de editar un registro existente con una clase modificada (donde la ID es la misma)? ¿Una especie de método de "actualizar todo lo que ha cambiado"? –

+1

Esto depende un poco del método de seguimiento de cambios pero con el seguimiento de instantáneas (que casi está usando) la mejor manera de hacerlo es estableciendo el indicador sucio en la entidad que ladislav toca cómo hacerlo aquí, http: // stackoverflow.com/a/6829996/1070291 pero es probable que desee hacerlo en la entidad, no en las propiedades –

+18

@JohnMitchell Después de adjuntar una entidad existente, puede establecer su estado modificado como modificado, por ejemplo 'context.Entry (client) .State = EntityState.Modified; ' – devlord

Cuestiones relacionadas