Recibo este error "El objeto no se puede eliminar porque no se encontró en ObjectStateManager".
Mi codigo es:
protected MyEntities sqlEntities;
public virtual void Delete(TEntity entity)
{
System.Type t = typeof(TEntity);
sqlEntities.DeleteObject(entity);
sqlEntities.SaveChanges();
}
var entity = new TEntity() { PK_ID = 23 }; sqlEntities.DeleteObject(entity);
estaba tratando de crear una entidad simulada con su PK configurado correctamente, con la esperanza de que Entity Framework llamara a DeleteObject basado en PKRespuestas:
Significa que la entidad no está adjunta (no fue cargada por la misma instancia de contexto). Prueba esto:
fuente
Solo una pequeña aclaración sobre la respuesta de Ladislav Mrnka (que debería ser la respuesta aceptada).
Si como yo, tienes un código en un formato como este:
... entonces esto es lo que quieres hacer:
Quizás esto parezca obvio, pero al principio no me quedó claro que es necesario especificar la entidad a la que unirse, y no solo el contexto .
fuente
Solo para corregir la explicación de Kjartans:
Yo tenía:
El problema es que usé mi propio método (GetProject ()) para obtener la entidad (por lo tanto, usé otro contexto para cargar la entidad):
Una solución podría ser adjuntar la entidad cargada como dice Kjartan, otra podría ser la solución mía, para cargar la entidad dentro del mismo contexto:
fuente
Sé que esta pregunta es bastante antigua, pero ninguna de las anteriores me funcionó, ya que estaba eliminando registros de más de una clase / servicio y cada uno de ellos estaba creando una instancia de su propio contexto de conexión de base de datos.
Lo que hice para solucionarlo fue enviar el primer contexto creado al resto de clases / servicios que iban a acceder a la base de datos.
Por ejemplo, mi
serviceA
iba a eliminar algunos de sus registros y llamarserviceB
yserviceC
hacer lo mismo con sus registros.Entonces yo borrar mis registros en
serviceA
y pasar como parámetro el contexto creado en laserviceA
queserviceB
yserviceC
.fuente
Puedes escribir este código:
fuente
En caso de que nada de lo anterior funcione, puede probar esta solución:
context.Entry(yourObject).State = System.Data.Entity.EntityState.Deleted; context.SaveChanges();
fuente
Debe asegurarse de que su objeto existe en la lista de la que está tratando de eliminar, debe poner la siguiente condición
si tiene una condición complicada para la igualdad , debe anular el método de igualdad en la clase de entidad para poner su condición de igualdad, para obtener la forma correcta para un método de extensión "entidad.contacto"
fuente
Asegúrese de que el modelo que pasa a Eliminar (entidad) sea exactamente el mismo que el registro de la base de datos.
Algunas veces es posible pasar el modelo sin algunos campos como Id o Fecha. guárdelos en @ html.Hiddenfor si publica como formulario.
La mejor manera es pasar la ID y obtener la entidad usando el método Find (Id) y pasarla a Remove (Entity)
Espero que esto ayude a alguien.
fuente
Tengo este problema y lo soluciono. Simplemente copie el siguiente código:
fuente
En mi caso, hubo un contexto, pero obtuve una entidad con la opción 'AsNoTracking'
fuente