2012-07-29 11 views
24

Eventuali duplicati:
Entity Framework 4 - AddObject vs AttachChe cosa fa esattamente Attach() in Entity Framework?

ho visto l'uso di collegare un paio di volte, soprattutto quando la manipolazione modelli.

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

Dal contesto sembra che funziona solo un UPDATE contro un record in EntityFrameworks, ma vedo anche che usato in DELETE dichiarazioni. Quindi posso solo supporre che ottenga solo un puntatore al database?

Qualcuno potrebbe indicarmi la giusta direzione, l'ho cercato su Google per un po 'e mentre non mi trovo vuoto, non riesco a trovare nessuna buona spiegazione di ciò che fa (da una panoramica e internamente).

+0

Sede [questa domanda] (http://stackoverflow.com/q/3920111/406903) e risposta accettata su 'Allega' e' AddObject'. – hmqcnoesy

+1

Grazie a @hmqcnoesy ho perso quello :) votato per chiudere come duplicato. –

risposta

36

Proprio come un punto di interesse il codice che hai postato non fa nulla

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

Tutto questo non fa altro che fissare l'entità al grafico di monitoraggio Non apportare modifiche al l'entità e salvarlo.

Tutte le modifiche apportate all'oggetto prima di allegare vengono ignorati nel salvare

Quale sarebbe più interessante è se effettivamente aggiornato un esempio di proprietà:

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

Interessante, vedo che cambia solo dopo essere stato allegato. Scusa per la minuscola tangente, c'è un modo pulito per modificare un record esistente con una classe già modificata (dove l'ID è lo stesso)? Una sorta di metodo "aggiorna tutto ciò che è cambiato"? –

+1

Questo dipende dal metodo di tracciamento delle modifiche un po 'ma con il tracciamento delle istantanee (che si utilizza quasi sicuramente) il modo migliore per farlo è impostando il flag dirty sull'entità ladislav tocca come farlo qui, http: // stackoverflow.com/a/6829996/1070291 ma probabilmente si desidera eseguire sull'entità non le proprietà –

+18

@JohnMitchell Dopo aver collegato un'entità esistente, è possibile impostare il suo stato modificato su modificato, ad esempio 'context.Entry (client) .State = EntityState.Modified; ' – devlord

Problemi correlati