2009-02-11 11 views
14

Estoy intentando adjuntar una entidad LINQ al contexto de datos después de recibirlo de un formulario POST. Sin embargo, lo único que consigue es la siguiente excepción:Problemas de adjuntar entidad en LINQ

An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy. 

También he intentado fijar la fila original, así:

dataContext.People.Attach(person, originalPerson); 

En este caso, me sale el siguiente excepción:

Object reference not set to an instance of an object. 

Aquí está el código en mi controlador:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(int id, Person person) { 
    var prevPerson = dataContext.People.Single(p => p.ID == id); 
    dataContext.People.Attach(person, prevPerson); 
    dataContext.SubmitChanges(); 
    return Redirect("~/People/Index"); 
} 

¿Alguna idea sobre lo que estoy haciendo mal aquí? Puedo publicar el código de entidad si es necesario.

+0

Qué línea/objeto es elevar la "Referencia a objeto no establecida como instancia de un objeto" ¿error? Supongo que prevPerson es nulo (¿quizás la ID no está asignada como esperabas?) Pero es difícil de decir sin ver el código ... –

+0

Todo está siendo mapeado. Lanza el error cuando Adjunto() la entidad al objeto Tabla. – changelog

Respuesta

12

En el diseñador LinqToSql establecer todos de la actualización de cheques a Nunca y cuando se adjunta llaman así:

context.entity.Attach(entity, true); 

Como alternativa, también se puede agarrar la entidad desde la db y cambiarla utilizando los datos de la entidad POSTed, luego envíe eso como un cambio.

+1

Eso fue todo. ¡Gracias! – changelog

+0

Me he encontrado con el mismo problema haciendo algo similar. –

+0

Esto funciona. Gracias. – Denis

14

seguir los siguientes pasos:

dataContext.People.Attach(person); 
dataContext.Refresh(RefreshMode.KeepCurrentValues, person); 
dataContext.SubmitChanges(); 
+0

funciona. Gracias – Jonas

+0

Esta es la solución que funcionó mejor para mí. No es necesario establecer 'UpdateCheck = Never' en todas las propiedades – BLSully

+0

funcionado a la perfección, para entidades adjuntas y no conectadas –

0

He resuelto mediante el establecimiento de UpdateCheck=Never a mi propiedad en el archivo .dbml y context.entity.Attach(entity, true);

Cuestiones relacionadas