Puede usar GetOriginalEntityState (..) para obtener los valores originales de los objetos, p. Clientes que usan los viejos valores almacenados en caché.
También puede repetir los cambios, p. actualiza y actualiza solo los objetos específicos y no las tablas completas porque la penalización de rendimiento será alta.
foreach (Customer c in MyDBContext.GetChangeSet().Updates)
{
MyDBContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, c);
}
esto revertirá los cambios utilizando datos persistentes en la base de datos.
Otra solución es volcar el contexto de datos que utiliza, utilizando Dispose().
En cualquier caso, es una buena práctica anular los métodos Insertar y Eliminar en la colección de p. Ej. Clientes que usa y agrega, p. una llamada InsertOnSubmit(). Esto resolverá su problema con inserciones y eliminaciones pendientes.
¿Esta fue la respuesta aceptada? Esto no funciona: las colecciones Actualizaciones/Inserciones/Eliminaciones son de solo lectura. Y la documentación de MSDN dice que estas colecciones se "computaron en el momento de la llamada" (de GetChangeSet()). http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.getchangeset.aspx – shaunmartin
No funciona para mí (VS2008) - Obtengo excepciones "la colección es de solo lectura" . Pero ponerlo en un ciclo foreach y actualizar cada tabla que está en ChangeSet - funciona. – greenoldman
Sí, esto solo es de solo lectura, esto no funcionará ya que viene de un GetChangeSet() get = readonly –