2013-04-11 14 views
24

Sono stato con Add() e corse in un problema in cui da una controllante veniva duplicata nel database quando Add ing un bambino. Utilizzando Attach() risolto questo, ma mi piacerebbe sapere perché, piuttosto che inciampare ciecamente intorno.Quando utilizzare DbSet <T> .Add() vs DbSet <T> .Attach()

+0

Penso che questo http://stackoverflow.com/questions/3920111/entity-framework-4-addobject-vs-attach si spera risponda alla tua domanda –

+0

Grazie. Ciò ha anche aiutato: http://stackoverflow.com/a/15310068/1185053 –

risposta

25

Bene, quando si utilizza Attach si indica al contesto che l'entità è già nel database, SaveChanges non avrà alcun effetto sulle entità collegate. Add, d'altra parte, cambia lo stato dell'entità nel contesto (se è già presente) a Added, vale a dire che sarà sempre inserire l'entità nel database quando si chiama SaveChanges.

Questa è la differenza.

+0

Grazie per la risposta. Perché in un "Controller" generato automaticamente in Edit si usa 'db.Entry (model) .State = EntityState.Modified; db.SaveChanges(); 'e non' Attach() '? –

+1

Perché quando si 'Attach()' un'entità che è già nel ** contesto **, come nel caso dell'entità memorizzata nella variabile 'model', imposta lo stato dell'entità su' Invariato', quindi se usi 'Attach()' per questo fine la tua entità non sarà aggiornata quando tu chiamerai 'SaveChanges()'. –

Problemi correlati