2011-12-23 18 views
8

Recibo el error Cannot remove an entity that has not been attached. cuando intento eliminar un registro. He buscado en Google en todo y aunque hay un montón de lugares para encontrar la solución para solucionar este problema, la solución sugerida no me consiga más allá:linq-to-sql "No se puede eliminar una entidad que no se ha adjuntado"

using (MyDataContext TheDC = new MyDataContext()) 
{ 
    TheDC.MyTable.Attach(ARecord); //added this line but doesn't fix it. 
    TheDC.MyTable.DeleteOnSubmit(ARecord); 
    TheDC.SubmitChanges(); 

Mi pregunta es la siguiente: no Este problema sólo afecta a eliminar consultas o también afecta a otros tipos de consultas y aún no me he topado con este problema. He escrito una consulta de actualización y parece funcionar sin correr este error.

Gracias.

Respuesta

11

Por favor refiérase a este SO de la publicación: How to delete in linq to sql?

... acerca de cómo adjuntar, si ya tiene la clave principal. Si no tiene la clave primaria, siempre he hecho una búsqueda y luego una eliminación, pero, cada vez que hago una búsqueda, tiendo a almacenar la clave primaria para las actualizaciones y las elimina.

Eliminará de la clave principal, pero si tiene eso, simplemente adjúntelo como hago a continuación y llame a eliminar. No paso el objeto que DLINQ necesita, ya que quiero poder cambiarlo si quiero, así que paso un objeto de usuario diferente y simplemente saco el PK de la clase de negocios y lo pongo en la clase DAO.

var db = new MeatRequestDataContext();    
if (input.UserID > 0) 
{ 
    entity = new User() 
    { 
     UserID = input.UserID 
    }; 
    db.Users.Attach(entity); 
    db.Users.DeleteOnSubmit(entity); 
} 
+3

+1 para MeatRequestDataContext() – bytebender

4

Para mí, la solución fue sólo la búsqueda para el objeto de base de datos en primer lugar.

var db = new MeatRequestDataContext(); 
if (input.UserID > 0) 
{ 
    var existing = db.Users 
     .Single(user => user.UserID == input.UserID); 

    db.Users.DeleteOnSubmit(existing); 
} 

En mi mente, sólo se pudo borrar lo que ya estaba allí, así que tenía que ir a buscar los artículos en la base de datos que quería eliminar en primer lugar. Esto también funciona con colecciones y DeleteAllOnSubmit().

Cuestiones relacionadas