5

Quindi, ho una DbContext, e sto facendo le seguenti operazioni:Che logica determina l'ordine di inserimento di Entity Framework 6

dbContext.SomeTables1.Add(object1) 
dbContext.SomeTables2.AddRange(objectArray2) 
dbContext.SomeTables3.AddRange(objectArray3) 
dbContext.SaveChanges(); 

L'EF non inserisce i record db in questo ordine, si inserisce li in un ordine casuale. Per inserirli nello stesso ordine, devo fare un dbContext.SaveChanges() dopo ogni aggiunta. Questa non è una soluzione efficiente e nel mio caso sono necessari 10 secondi per eseguire tutti i miei inserimenti, mentre l'ordine casuale con un salvataggio dura circa 3 secondi.

N.B. Mi serve l'ordine giusto per risolvere un problema di stallo.

Le mie domande sono:

  • È questo il problema risolto in EF7?
  • Posso profilare EF e determinare l'ordine casuale, tuttavia, esiste una garanzia che sarà coerente con lo stesso ordine casuale o cambia tra le richieste? (Posso adottare il mio altro codice se la risposta a questa domanda è positiva).
  • C'è un modo migliore per mantenere l'ordine di dbContext.SaveChanges() su ogni aggiunta?
+0

Non ti * veramente * aiuterà, ma è interessante leggere però ... http://stackoverflow.com/a/11521882/265165 – thmshd

risposta

3
  • Non è possibile specificare un ordine di salvataggio in EF6 o EF7.
  • Il problema non viene risolto in EF7 poiché non si tratta di un problema.
  • L'ordine sarà lo stesso se il predecessore sono gli stessi (che probabilmente raramente accadrà)

Quando si chiama SaveChanges, tutte le entità sono ordinate da un ordine interno nel metodo “ProduceDynamicCommands” poi ordinato di nuovo con il metodo "TryTopologicalSort" quale loop per aggiungere il comando senza il predecessore a sinistra (se si aggiunge A e B e A dipendono da B, allora B sarà inserito prima di A)

Si lascia inserire per aggiunta di lotto.

Poiché sono necessari 3 secondi per eseguire l'inserto, suppongo che tu abbia migliaia di entità e che l'inserimento in serie possa migliorare le tue prestazioni per ridurre i 10 secondi a meno che forse i 3 secondi iniziali!

Ecco 2 biblioteca posso raccomandare:

Diniego: Sono il proprietario del progetto Entity Framework Estensioni.

0

È possibile ordinarlo prima di utilizzare la funzione Aggiungi e quindi utilizzare il salvataggio? Sarebbe d'aiuto/l'hai provato?

+0

Che cos'è "it"? Come vuoi che io li ordini prima di inserirli, questa risposta non è chiara. – Adam

+0

"it", il contesto, quando si salva si salva il contesto e gli oggetti al suo interno. All'interno di dbcontext, c'è qualche array di oggetti che stai inserendo? –

+1

Non so se hai capito la domanda o se non capisco la tua risposta. Sto organizzando l'aggiunta ma l'SQL risultante (tramite la creazione di profili) mostra che sono organizzati in modo casuale, non nello stesso modo in cui vengono aggiunti. Questo è un comportamento noto in EF. – Adam

Problemi correlati