entity-framework - tutorial - entity framework ventajas y desventajas
¿Cuál es la mejor manera de utilizar el método.SaveChanges() en ADO.Net Data Services? (2)
Estoy usando EntityFramework en un proyecto pequeño también, así que estoy muy interesado en la pregunta también. Dos preguntas rápidas: ¿Has intentado cambiar el almacenamiento en caché de los objetos de datos en el contexto de datos? ¿Has intentado cerrar el contexto de datos y creado uno nuevo durante el ciclo para liberar memoria?
Saludos
Kenneth
¿Alguien tiene buena información sobre el uso del método .SaveChanges ()?
Estoy experimentando una variedad de problemas cuando intento 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 como ellos van. (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.
- Llame a .SaveChanges () sin ningún parámetro una vez al final del ciclo foreach (es decir, fuera del ciclo)
- Error de OutOfMemory aproximadamente 1/3 del camino (30,000 de 90,000 guardados) - 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?
- Llame a .SaveChanges () sin ningún parámetro una vez por ciclo
- Esto funciona, pero toma absolutamente para siempre (8 horas para 90,000 guardados)
- Llamar a .SaveChanges (SaveChangesOption.Batch) una vez al final del ciclo foreach
- Mismo error de OutOfMemory, pero sin guardar en la base de datos
- Llame a .SaveChanges (SaveChangesOption.Batch) una vez por ciclo
- 404 error no encontrado
- Llame a .SaveChanges (SaveChangesOption.Batch) una vez cada 10 bucles
- 400 Error de solicitud incorrecta (ocasionalmente)
- OutOfMemory después de varias 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 diferentes, incapaces de cuantificar, ninguno realmente tan bueno
¿Cuál es el método preferido para invocar .SaveChanges () desde un objeto cliente al realizar una gran carga de datos como esta? ¿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 ()?
No tengo mucha experiencia en el uso de EntityFramework (solo un experimento aleatorio), ¿ha intentado llamar a .SaveChanges () cada n iteraciones?
Quiero decir algo como esto:
int i = 0;
foreach (var item in collection)
{
// do something with your data
if ((i++ % 10) == 0)
context.SaveChanges();
}
context.SaveChanges();
Sé que es feo, pero es la primera solución posible que se me ocurrió.