¿Alguien tiene alguna buena información sobre el uso del método .SaveChanges()?¿Cuál es la mejor forma de utilizar el método .SaveChanges() en ADO.Net Data Services?
Tengo una variedad de problemas al intentar utilizar el método .SaveChanges() en mi objeto de contexto de datos. Estoy tomando datos de una fuente de datos existente, creando los objetos apropiados EntityFramework/DataService, completando esos objetos creados con datos, agregando esos objetos al contexto y luego guardando esos datos llamando a .SaveChanges.
Los escenarios que he encontrado (y los problemas asociados con ellos) son como tales ... En cada escenario tengo un bucle foreach que toma datos de filas en una DataTable y genera los objetos, adjuntándolos al contexto a medida que avanzan. (nota: tres objetos son un "miembro" y dos "direcciones" conectadas a través de una llamada SetLink): básicamente, esta es una herramienta de conversión para tomar datos de un data store y dar masajes a un data store expuesto por Data Services.
- .SaveChanges de Llamadas() sin ningún parámetro una vez al final del bucle foreach (es decir, fuera del bucle)
- error OutOfMemory aproximadamente 1/3 del camino (30.000 de 90.000 salva) - no estoy seguro de cómo está sucediendo eso, ya que cada elemento guardado es una llamada SQL separada a la base de datos, ¿qué hay para quedarse sin memoria?
- .SaveChanges call() sin ningún parámetro de una vez por bucle
- Esto funciona, pero tiene absolutamente para siempre (8 horas para 90.000 salva)
- .SaveChanges de llamadas (SaveChangesOption.Batch) una vez al final del bucle foreach
- error OutOfMemory mismo, pero sin ningún guarda en la base de datos
- .SaveChanges de llamada (SaveChangesOption.Batch) una vez al bucle
- 404 no se encuentra el error
- .SaveChanges de llamada (SaveChangesOption.Batch) una vez por cada 10 bucles
- 400 Solicitud error inadecuado (ocasionalmente)
- OutOfMemory después de un número de iteraciones
- Una serie de intentos aleatorios para crear el contexto una vez por ciclo, o tenerlo como una variable al comienzo del ciclo o tenerlo como una variable de miembro privado que está disponible.
- resultados divergentes, incapaz de cuantificar, ninguno realmente tan bueno
¿Cuál es el método preferido de llamar .SaveChanges() de un objeto cliente cuando se hace una carga de datos de gran tamaño como este? ¿Hay algo que no entiendo acerca de cómo funciona .SaveChanges()? ¿Puede alguien proporcionar más detalles sobre cómo una vez debería utilizar esta función y cuáles (si las hay) son las limitaciones para guardar datos a través de los servicios de datos?¿Existen mejores prácticas en torno a la llamada al método .SaveChanges()? ¿Existe alguna documentación particularmente buena sobre la llamada al método .SaveChanges()?
¿Qué "cambios" está implementando? ¿Por qué 90,000 ahorras? Tal vez deberías probar la replicación SQL, si solo estás pasando datos? solo un pensamiento. – D3vtr0n
solo para aclarar, cuando dices "una vez por ciclo" te refieres a una llamada por ciclo * iteración *? – Veverke