2012-01-31 2 views

risposta

19

Quando si utilizza dbContext.SomeEntitySet.Add(entityInstance);, lo stato per questo e tutte le relative entità/raccolte è impostato su aggiunto, mentre dbContext.Entry(entityInstance).State = EntityState.Added; aggiunge anche tutte le entità/raccolte correlate al contesto, ma le lascia come non modificate. Quindi se l'entità che si sta tentando di creare ha un'entità correlata (e il suo valore non è nulla), quando si utilizza Aggiungi creerà un nuovo oggetto per quell'entità figlio, mentre con l'altro modo non lo farà.

+0

e ciò vale anche per EntityState.Deleted ed EntityState.Changed? –

+0

Credo che tu ti riferisca a dbContext.Entry (entityInstance) .State, in tal caso, penso di sì, poiché il metodo Entity lo aggiunge al grafico senza cambiare il suo stato (non modificato) e poi cambi manualmente lo stato di solo entità, non i relativi. – fbiagi

+0

Hai visto il commento di @MikeBrind sull'altra domanda? – Colin

1

Ho appena provato questo con EF 6, con relative proprietà entità/navigazione, e in entrambi i casi gli oggetti creati erano identici. (Tutti gli oggetti figlio parent e related sono stati creati.) L'unica differenza che ho notato è che Add era più veloce di circa un fattore 2. I miei dati avevano 1000 oggetti padre, ciascuno con 5 oggetti figlio per un totale di 6000 oggetti scritti nel DB .