Usando EF5 con un patrón de repositorio genérico y ninject para la detección de dependencias y un problema cuando intento actualizar una entidad a la base de datos utilizando procesos almacenados con mi edmx.Ya existe un objeto con la misma clave en ObjectStateManager. El ObjectStateManager no puede rastrear múltiples objetos con la misma clave
mi actualización en DbContextRepository.cs es:
public override void Update(T entity)
{
if (entity == null)
throw new ArgumentException("Cannot add a null entity.");
var entry = _context.Entry<T>(entity);
if (entry.State == EntityState.Detached)
{
_context.Set<T>().Attach(entity);
entry.State = EntityState.Modified;
}
}
De mis AddressService.cs que se remonta a mi repositorio que tienen:
public int Save(vw_address address)
{
if (address.address_pk == 0)
{
_repo.Insert(address);
}
else
{
_repo.Update(address);
}
_repo.SaveChanges();
return address.address_pk;
}
cuando golpea el Adjuntar y se EntityState.Modified vomita con el error:
Ya existe un objeto con la misma clave en ObjectStateManager. ObjectStateManager no puede rastrear múltiples objetos con la misma clave.
He revisado muchas de las sugerencias en pila y en Internet y no he encontrado nada que lo resuelva. Cualquier solución sería apreciada.
Gracias!
Gracias. Así que creé una interfaz IEntity con int Id {get; conjunto; } luego intenté hacer público anular la actualización vacía (entidad T) donde T: IEntity pero no le gusta el lugar donde T: IEntity. Esto se encuentra en una clase de repositorio, es decir, clase pública DbContextRepository: BaseRepository donde T: clase si eso hace la diferencia. ¡Gracias! –
Juan
En tal caso, coloque la restricción directamente en la definición de clase –
hmm .. todavía no tiene mucha suerte. Me pregunto si es porque estoy usando un modelo de Edmx. Pero no puedo poner la restricción directamente en la clase ya que implementa BaseRepository e IRepository. Además en el edmx, las entidades provienen de vistas y las claves principales son algo así como address_pk. – Juan