una tabla net mvc mostrar framework first example español datos code asp entity-framework asp.net-mvc-3

entity framework - tabla - Ya existe un objeto con la misma clave en ObjectStateManager. ObjectStateManager no puede rastrear múltiples objetos con la misma clave



mostrar datos de una tabla en mvc (6)

Tengo el siguiente código para agregar o actualizar el objeto Entity. encontrar el objeto por clave principal, basado en la respuesta que estoy agregando o actualizando el objeto.

Agregando trabajos de registro, pero durante la actualización aparece el mensaje de error " Ya existe un objeto con la misma clave en ObjectStateManager. ObjectStateManager no puede rastrear múltiples objetos con la misma clave"

En mi base de datos MSSQL tengo solo un registro.

var v = db.Envelopes.Find(model.ReportDate, model.Service); if (v == null) { db.Envelopes.Add(model); db.SaveChanges(); ViewBag.status = "Record Add successfully"; ModelState.Clear(); } else { db.Entry(model).State = EntityState.Modified; db.SaveChanges(); }

¿Cómo puedo solucionar este mensaje de error?


Como se menciona por @anon, no puede adjuntar modelo una vez que cargó la entidad con la misma clave. Los cambios deben aplicarse a la entidad adjunta. En lugar de esto:

db.Entry(model).State = EntityState.Modified;

utilizar esta:

db.Entry(v).CurrentValues.SetValues(model);


Estoy usando esto porque ya creé una nueva instancia y llené las propiedades que necesito actualizar.

var key=this.CreateEntityKey("Envelopes",model); ObjectStateEntry ose; if(this.ObjectStateManager.TryGetObjectStateEntry(key, out ose)){ var entity=(Page)ose.Entity; Envelopes.Detach(entity); } this.Envelopes.Attach(model);




Supongo que está diciendo que su error ocurre aquí:

db.Entry(model).State = EntityState.Modified;

Una vez que ejecutas Find (), tu Envelope ya está siendo rastreado por tu contexto. Esto significa que si necesita cambiar una propiedad, simplemente cámbiela en v y luego llame a SaveChanges (). No se preocupe por establecer el estado en Modificado.


Y otro enfoque para resolver el problema es separar la entidad rastreada y volver a adjuntar la modificada . Vea mi solución here .