2011-01-18 15 views
13

Estoy intentando actualizar un objeto utilizando POCO marco de la entidad de la siguiente manera:marco Entidad adjuntar actualización no trabaja

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

que no funciona. No se arroja ningún error, simplemente no está actualizando los valores en la base de datos.

me trataron:

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

males Nada, todavía no hay error y no hay actualizaciones.

Respuesta

19

¿Qué hay de cambiar el ObjectState?

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

De MSDN: ObjectStateManager.ChangeObjectState Method.

+6

En el espíritu de mantener esta respuesta al día, con EF6 su contexto.Entrada (trabajo) .Estado = System.Data.Entity.EntityState.Modified – matto0

+1

La API de EF es como hablar con la pared de ladrillo. –

2

Supongo que está trabajando con un objeto separado: consulte la segunda parte de this answer.

1

que tienen que hacer el trabajo primero y luego se podría actualizar con éxito, chk a continuación fragmento de código

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

otra razón por la que esto no puede funcionar es cuando el archivo correspondiente Jobs.cs se ha cometido, pero el .edmx archivo no tiene. Esto significa que la propiedad está presente pero no asignada y, por lo tanto, EF no considera el objeto modificado. Por ejemplo:

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

si SomeProperty está presente en Jobs.cs pero que falta en el archivo .edmx, este código compilar y ejecutar sin un indicio de que algo está mal, pero SomeProperty no se actualizará en la base de datos. Me llevó la mejor parte de un día encontrar esta.

Cuestiones relacionadas