2011-01-18 10 views
13

Sto cercando di aggiornare un oggetto POCO utilizzando Entity Framework nel seguente modo:Entity Framework allegare aggiornamento non lavora

context.Jobs.Attach(job); 
context.SaveChanges(); 

che non funziona. Nessun errore viene generato, semplicemente non sta aggiornando i valori nel database.

ho provato:

context.Jobs.AttachTo("Jobs", job); 
context.SaveChanges(); 

torti niente, ancora nessun errore e nessun aggiornamento.

risposta

19

Che ne dici di cambiare il ObjectState?

context.ObjectStateManager.ChangeObjectState(job, System.Data.EntityState.Modified); 

Da MSDN: ObjectStateManager.ChangeObjectState Method.

+6

Nello spirito di mantenere questa risposta attuale, con EF6 il suo contesto. Entrata (lavoro) .Stato = System.Data.Entity.EntityState.Modified – matto0

+1

L'API di EF è come parlare al muro di mattoni. –

2

Suppongo che tu stia lavorando con oggetti distaccati - controlla la seconda parte di this answer.

1

è necessario per ottenere il lavoro prima, allora si potrebbe aggiornare con successo, chk sotto frammento

var job = context.Jobs.Where(p => p.Id == id).FirstOrDefault(); 
//apply your changes 
job.Title = "XXXX"; 
///.... 
context.SaveChanges(); 
+0

var job = context.Jobs.SingleOrDefault (p => p.Id == id); – jolySoft

0

un'altra ragione per cui questo potrebbe non funzionare è quando il file Jobs.cs corrispondente è stato commesso, ma l'edmx il file non ha. Ciò significa che la proprietà è presente ma non mappata e pertanto EF non considera l'oggetto modificato. Per esempio:

... 
using (var dao = new DbContext()) 
{ 
    dao.Jobs.Attach(job); 
    job.SomeProperty = 1234; // SomeProperty exists but is not in the .edmx 
    dao.SaveChanges(); 
} 

se SomeProperty è presente in Jobs.cs ma manca dal file .edmx, questo codice compilare ed eseguire senza un indizio che qualcosa è sbagliato, ma SomeProperty non verrà aggiornato nel database. Mi ha preso la parte migliore di un giorno per trovare questo.

Problemi correlati