2010-04-19 21 views
13

Tengo este problema donde después de que un campo (digamos Field3 en la tabla MyTable) se actualiza en la base de datos, MyTable.Field3 (en C#) sigue devolviendo el valor anterior.LINQ to SQL no se actualiza cuando los datos han cambiado en la base de datos

¿Sospecho que hay algo de almacenamiento en caché ...?

¿Cómo lo fuerzo a:
¿Leyó el valor de la base de datos?
O
¿Desea actualizar el valor en la clase MyTable?

¿O hay algo que extraño? Soy nuevo en LINQ

Gracias de antemano.

Respuesta

11
DataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, entity); 

Si desea actualizar todo su conjunto de entidades, la forma más fácil es probablemente sólo crear un nuevo DataContext y nueva consulta para todo.

+2

Arroja esta excepción: No se reconoce un objeto especificado para la actualización. Aparentemente el registro se cambia utilizando Context.SubmitChanges(); Puedo decir si un registro se está actualizando, ¿cómo puedo actualizar el valor solo para ese registro justo después de actualizarlo? – Aximili

+0

¿Hay algún código de muestra en alguna parte? Ni siquiera sé los términos que necesito para google, ¿qué debo buscar? Gracias – Aximili

+3

Cuando llama a SubmitChanges(), su objeto debería actualizarse. Si no es así, compruebe la propiedad UpdateMode en los campos de su modelo de datos de Linq to SQL para asegurarse de que está configurado como "actualización automática". –

6

No entiende bien el modelo. Linq to SQL no pasa a la base de datos cada vez que solicita un miembro. Cuando recuperas un objeto de la base de datos, se almacena en la memoria como un objeto Linq to SQL, y ahí está. No obtiene una versión actualizada del objeto hasta que vuelva a consultar la base de datos.

+0

Veo, eso es lo que pensé, gracias Dave. Entonces, ¿cómo hago para sincronizar el valor en la memoria para que coincida con el de la base de datos? – Aximili

+1

Solicitará el objeto nuevamente desde el DataContext. –

+0

¿Cómo haces eso Robert? – Aximili

Cuestiones relacionadas