2009-02-11 10 views
14

Sto tentando di collegare un'entità LINQ al contesto dati dopo averlo ricevuto da un modulo POST. Tuttavia, tutto quello che ottiene è la seguente eccezione:Problemi di collegamento delle entità in 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. 

Ho anche provato allegando riga originale, così:

dataContext.People.Attach(person, originalPerson); 

In questo caso, ottengo la seguente eccezione:

Object reference not set to an instance of an object. 

Ecco il codice nel mio controller:

[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"); 
} 

Qualche idea su cosa sto facendo male qui? Posso postare il codice entità, se necessario.

+0

Quale linea/oggetto sta alzando la "riferimento oggetto non impostato su un'istanza di un oggetto" errore? Direi che prevPerson è nullo (forse l'ID non viene mappato come ti aspetti?) Ma è difficile dire senza vedere il codice ... –

+0

È tutto mappato. Genera l'errore quando collego() l'entità all'oggetto Tabella. – changelog

risposta

12

Nella finestra di progettazione LinqToSQL impostare tutte le Update verifica su Mai e quando si collega lo chiamano in questo modo:

context.entity.Attach(entity, true); 

In alternativa, si potrebbe anche prendere l'entità dal db e modificarla utilizzando i dati provenienti da l'entità POST, quindi inviarla come una modifica.

+1

E 'stato. Grazie! – changelog

+0

Ho incontrato lo stesso problema facendo qualcosa di simile. –

+0

Questo funziona. Grazie. – Denis

14

Prova seguente:

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

funziona. thanx – Jonas

+0

Questa è la soluzione che ha funzionato meglio per me. Non è necessario impostare "UpdateCheck = Never' su tutte le proprietà – BLSully

+0

perfettamente funzionante, per entità collegate e non collegate –

0

Ho risolto impostando UpdateCheck=Never di mia proprietà nel file di .Dbml e context.entity.Attach(entity, true);

Problemi correlati