2011-06-06 27 views
7

Tengo un objeto LinqToSql en la memoria, cuyos valores de campo en la base de datos se espera que cambien durante el tiempo de vida del objeto. Entonces, periódicamente debo verificar si todo está sincronizado. Yo estaba esperando a ser capaz de hacer esto de esta manera:¿Cuál es el uso correcto de DataContext.Refresh()?

myDataContext.Refresh(RefreshMode.KeepCurrentValues, myObj); 

pero por desgracia esto parece tener ningún efecto; los valores en myObj permanecen iguales incluso cuando los valores DB han cambiado. MSDN documentation on this method es bastante escaso. ¿Alguien puede decirme qué me falta aquí?

Respuesta

12

Si desea que los valores actuales de su objeto actualizado coincidan con los de la base de datos en ese momento, necesitará usar el modo RefreshMode.OverwriteCurrentValues.

+1

Aaaaagggggghhhhh! ¡No puedo creer que me haya perdido eso! [ruboriza profundo escarlata] –

+1

Parece que no actualiza la propiedad de colección asociada que se asigna a otra tabla. Está actualizando solo las propiedades que se asignan a la columna de la tabla a la que apunta la entidad actual. – RBT

3

Si usted quiere "actualizar" su entidad con los valores actualizados, entonces la apropiada mode habría RefreshMode.KeepChanges o RefreshMode.OverwriteCurrentValues.

KeepChanges dejará cualquier valor cambiado localmente como está. OverwriteCurrentValues obtendrá todos los valores de la base de datos.

Cuídate de ChangeConflictException s.

Cuestiones relacionadas