Tengo un pequeño problema con la actualización de entidades si la entidad se cambia fuera de DbContext (es una entidad separada). Si adjunto la entidad modificada, su estado no se modifica.¿Cómo actualizar las entidades que se modifican fuera de DbContext?
Mi código es el siguiente:
var specificationToSave = GetSpecificationFromTmpStore(userSessionGuid);
using (var context = DataContextFactory.GetDataContext())
{
// this works for update, if I change the values inside the context while debugging
// but it breaks with new entities
context.Specifications.Attach(specificationToSave);
// this works for insert new entities, modified entities will be saved as new entities
context.Specifications.Add((specificationToSave);)
context.SaveChanges();
}
sé NHibernate y es el método saveOrUpdate. NHibernate decide por los valores si está actualizando o insertando las entidades.
¿Cuál es la mejor práctica para hacer esto con EF 4.x y con entidades que se modifican fuera del DbContext? ¿Cómo puedo decirle al EF que esta entidad está en estado modificado?
Muchas gracias :-) Eso es lo que estaba buscando. La segunda forma es la mejor, pero en este caso no es posible. Así que tengo que actualizar el estado de DbEntityEntry directamente. No es una solución muy buena, pero funciona. –
Es cierto, si es necesario establecer el estado de cada entidad relacionada de 'specificationToSave'. por ejemplo, si tengo una lista de elementos modificados en mi 'specificationToSave'. Realmente espero que haya una solución simple para hacer eso ... –
@ Jürgen parent: escenarios infantiles necesitan una consideración especial, ya que es posible que deba agregar, eliminar o actualizar los elementos secundarios. FWIW Normalmente solo hago un hash en los niños para ver si alguno ha cambiado, y si lo han hecho, para eliminar todos los existentes e insertar todos los hijos nuevamente. Pero eso solo soy yo perezoso. – StuartLC