2010-04-01 21 views
10

Tengo problemas con la actualización de objetos en mi base de datos. Tengo dos PC y dos aplicaciones.Entity Framework - actualizar objetos desde la base de datos

En la primera PC, hay una aplicación que se comunica con mi base de datos y agrega algunos datos a la tabla de Mediciones. En mi otra PC, hay una aplicación que recupera la última medición con un temporizador, por lo que también debe recuperar las medidas agregadas por la aplicación en mi primera PC.

El problema es que no. En el inicio de mi aplicación, almacena en caché todos los datos de la base de datos y nunca se agregan nuevos datos. Utilizo el método Refresh() que funciona bien cuando cambio alguno de los datos en caché, pero no actualiza los datos recién agregados.

Aquí es mi método que debe actualizar los datos:

public static Entities myEntities = new Entities(); 

    public static Measurement GetLastMeasurement(int conditionId) 
    { 
     myEntities.Refresh(RefreshMode.StoreWins, myEntities.Measurements); 

     return (from measurement in myEntities.Measurements 
       where measurement.ConditionId == conditionId 
       select measurement).OrderByDescending(cd => cd.Timestamp).First(); 
    } 

P. S. Las aplicaciones tienen diferentes cadenas de conexión en app.config (cuentas diferentes para la misma base de datos).

+0

Puede comprobar mi respuesta aquí http://stackoverflow.com/questions/1746941/objectcontext-refresh –

Respuesta

9

Esto debería funcionar:

public static Entities myEntities = new Entities(); 

public static Measurement GetLastMeasurement(int conditionId) 
{ 
    myEntities.Refresh(RefreshMode.StoreWins, myEntities.Measurements); 
    var allMeasurements = myEntities.Measurements.ToList();//retrieves all measurements from database 

    return (from measurement in allMeasurements 
      where measurement.ConditionId == conditionId 
      select measurement).OrderByDescending(cd => cd.Timestamp).First(); 
} 

¿Qué sentido hace que el almacenamiento en caché al actualizar tienda cada vez que desee utilizarlo? Puede cambiarlo a:

public Measurement GetLastMeasurement(int conditionId) 
{ 
    var entities = new Entities(); 
    return (from measurement in entities.Measurements 
      where measurement.ConditionId == conditionId 
      select measurement).OrderByDescending(cd => cd.Timestamp).First(); 
} 

También busca en la base de datos con cada llamada, pero realiza menos operaciones.

+0

La primera solución que usted ha mencionado todavía no retrive los datos que acaba de agregar a mi base de datos. Su segunda solución que esperaba funcionar, tampoco funciona. No lo preferiría porque de esta manera abro un nuevo contexto en mi base de datos cada vez que quiero obtener la última medición. Cuando reinicio mi aplicación, recupera los datos nuevos, pero no se recupera si se agrega algo mientras la aplicación está funcionando. ¿Hay alguna posibilidad de que las diferentes cuentas que estoy usando para cada aplicación (una que agrega y otra que recupera datos de la base de datos) sean la razón de esto? –

+0

@Nebo: ¿La segunda solución no funciona? ¿Qué devuelve? – LukLed

+0

Con cualquiera de esas dos soluciones obtengo lo mismo que ya tenía. Si edito una fila en una tabla de Mediciones (que ha sido recuperada en el inicio de la aplicación), la actualiza. Pero si agrego una nueva fila, no la recuperará. En ambos casos. Esta vez edité una nueva fila existente y agregué directamente usando mi SQL Manangement Studio. –

Cuestiones relacionadas