2010-08-12 16 views
9

En LINQ-to-SQL si actualizo un objeto en el contexto pero no he llamado a SubmitChanges, ¿hay alguna manera de "deshacer" o abandonar esa actualización para que los cambios no se envíen cuando eventualmente llame a SubmitChanges? Por ejemplo, si actualicé varios objetos y luego decidí que quería abandonar los cambios en uno de ellos antes de enviarlos.¿Puedo "deshacer" una actualización de LINQ to SQL?

Parte 2: la misma pregunta para Entity Framework, versión 3.5

+0

posible duplicado de http://stackoverflow.com/questions/259219/how-can-i-reject-all-changes-in-a-linq-to-sqls-datacontext – relet

+0

No, ese artículo es sobre cómo deshacer todos los cambios. Solo quiero abandonar algunos de ellos. – Sisiutl

Respuesta

2

Tanto LINQ a SQL y Entity Framework utilizará la misma llamada (suponiendo que todavía tiene el contexto activo):

_dbContext.Refresh(RefreshMode.OverwriteCurrentValues, yourObj); 

Un una forma más apropiada sería tratar el Contexto como una Unidad de Trabajo, en cuyo caso ya no tendría un contexto activo al actualizar el objeto. Simplemente deseche el objeto que está utilizando actualmente y obtenga una copia nueva de un nuevo contexto.

1

Creo que puede usar .GetOriginalEntityState (yourEntity) para recuperar los valores originales. A continuación, establezca su entidad actualizado de nuevo a la original

dim db as new yourDataContext 
//get entity 
dim e1 as yourEntity = (from x in db.table1).take(1) 
//update entity 
e1.someProperty = 'New Value' 
//get original entity 
dim originalEntity = db.table1.getOrignalEntityState(e1) 
e1 = originalEntity 
db.submitChanges() 

Muy pseudo-código, pero creo que transmite la idea correcta. Con este método, también puede deshacer uno o más cambios de propiedad sin actualizar toda la entidad.