¿Cuál es la forma correcta y rápida de guardar entidades combinadas de POCO nuevas y modificadas?Cómo guardar entidades separadas (nuevas + modificadas) separadas en Entity Framework?
estaba pensando acerca de estos métodos:
private void Method_2(IList<Entity> entities) //detached entities
{
//This method is using SELECT to check if entity exist
using (var context = new ModelContainer())
{
foreach (Entity entity in entities)
{
var foundEntity = context.CreateObjectSet<Entity>().SingleOrDefault(t => t.Id == entity.Id);
context.Detach(foundEntity); //Remove it from ObjectStateManager
if (foundEntity != null)//It is modified entity
{
context.AttachTo("EntitySet", entity); //Attach our entity
context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); //We know it exists
}
else//It is new entity
{
context.CreateObjectSet<Entity>().AddObject(entity);
}
}
context.SaveChanges();
}
}
private void Method_1(IList<Entity> entities) //detached entities
{
//This method doesn't select anything from DB, but i have ta call Savechanges after each object
using (var context = new ModelContainer())
{
foreach (Entity entity in entities)
{
try
{
context.AttachTo("EntitySet", entity);
context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
context.SaveChanges();
}
catch (OptimisticConcurrencyException)
{
context.ObjectStateManager.ChangeObjectState(entity, EntityState.Added);
context.SaveChanges();
}
}
}
}
Cuando se trabaja en el entorno individual que tiene que saber qué entidad se añadió y que es modificada - es su responsabilidad de mantener esta información y proporcionar a ObjectContext.
Bueno, estoy de acuerdo con esta afirmación si te encuentras en una situación en la que necesitas usar un código EF como este en EF definitivamente algo está mal con tu decisión. He elegido la herramienta incorrecta para este trabajo.
El uso de Entity Framework para sincronizar DBs a través de WCF fue una mala idea, funciona muy lento, terminé usando DTO con una guarida de acceso de datos ADO .NET ligera y personalizada. –