Qué lógica determina el orden de inserción de Entity Framework 6

c# entity-framework entity-framework-6 entity-framework-core

Pregunta

Entonces, tengo un DBContext, y estoy haciendo las siguientes operaciones:

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

El EF no inserta los registros db en este orden, los inserta en un orden aleatorio. Para insertarlos en el mismo orden, tengo que hacer un dbContext.SaveChanges() después de cada adición. Esta no es una solución eficiente y, en mi caso, está demorando 10 segundos en realizar todas las inserciones, mientras que el orden aleatorio con una operación de guardado toma alrededor de 3 segundos.

NB Necesito el orden correcto para resolver un problema de interbloqueo.

Mis preguntas son:

  • ¿Este problema se resuelve en EF7?
  • Puedo hacer un perfil de EF y determinar el orden aleatorio. Sin embargo, ¿existe una garantía de que sea coherente con el mismo orden aleatorio o cambia entre las solicitudes? (Puedo adoptar mi otro código si la respuesta a esta pregunta es positiva).
  • ¿Hay una mejor manera de mantener el orden que dbContext.SaveChanges() en cada adición?

Respuesta aceptada

  • No hay forma de que pueda especificar una orden de guardado en EF6 o EF7.
  • El problema no se resuelve en EF7 ya que no es un problema.
  • El orden será el mismo si el predecesor es el mismo (lo que probablemente sucederá raramente)

Cuando llama a SaveChanges, todas las entidades se ordenan desde una orden interna en el método "ProducteDynamicCommands" y luego se clasifican de nuevo por el método "TryTopologicalSort "que se agrega para agregar un comando sin predecesor (si agrega A y B y A depende de B, luego B se insertará antes de A)

Se deja insertar por lote.

Ya que le toma 3 segundos realizar su inserción, asumiré que tiene miles de entidades y que realizar una inserción masiva puede mejorar su rendimiento para reducir los 10 segundos a menos, ¡y tal vez los primeros 3 segundos!

Aquí hay 2 bibliotecas que puedo recomendar:

Descargo de responsabilidad : soy el propietario del proyecto Entity Framework Extensions.


Respuesta popular

¿Podría pedirlo antes de usar la función Agregar y luego usar guardar? ¿Ayudaría / he probado esto?




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué