Hacemos una verificación profunda cada tutoriales de nuestro espacio con el objetivo de enseñarte en todo momento información más veraz y actualizada.
Solución:
Parece que tienes alguna relación con extranjeros. key campo y una propiedad de navegación en el item
, y esos campos tienen valores en conflicto. Esto ocurre cuando carga una entidad y sus entidades relacionadas, cambia la relación en un extremo, marca solo ese extremo como Modified
y tratar de salvar. Asegúrese de modificar la relación en ambos extremos y marque todas las entidades afectadas como Modified
antes de llamar SaveChanges
.
Encontré esta excepción en un conjunto diferente de circunstancias, y estoy publicando aquí ya que esta pregunta surge cuando se busca el mensaje de error.
La excepción fue lanzada al llamar IObjectContextAdapter.ObjectContext.AttachTo(entitySetName, entity)
con una entidad parcialmente cargada. El extranjero keys en la entidad se definieron, pero las propiedades de navegación no se cargaron. (Eso es, O.ItemID
tenía un valor, pero O.Item
estaba null). Las circunstancias específicas no permitieron O.Item
para ser cargado
El problema resultó ser que el Administrador de estado de objetos había cargado el objeto en un método separado y ya estaba rastreando el objeto definido con el mismo keys. Dado que el método separado no necesitaba rastrear el estado del objeto, el problema se resolvió llamando IQueryable.AsNoTracking()
dentro de ese método.
¿Cuál es la definición del objeto item? Parece que en algunas de sus colecciones que marcan la relación con otras entidades existe algún tipo de conflicto. Podrías intentar borrar todas las colecciones para ver si el problema persiste, pero en este caso perdiste el extranjero key asignación. Pero tal vez podría ayudarte a localizar el problema.
Esto podría ser un consejo. Cuando trato de adjuntar una entidad existente al contexto, suelo hacer lo siguiente:
mMaMDBEntities.Entry(item).State = System.Data.EntityState.Modified;
Puede agregar el uso de System.Data para evitar la necesidad de escribirlo todo el tiempo.
Esto adjunta la entidad en el estado que desea, modificado en este caso y realiza un seguimiento de los cambios. Esta es una línea en lugar de dos.
Recuerda que puedes mostrar este tutorial si te valió la pena.