2010-04-01 17 views
10

Ich habe Probleme mit der Aktualisierung von Objekten in meiner Datenbank. Ich habe zwei PCs und zwei Anwendungen.Entity Framework - Objekte aus der Datenbank aktualisieren

Auf dem ersten PC gibt es eine Anwendung, die mit meiner Datenbank kommuniziert und einige Daten zur Tabelle Measurements hinzufügt. Auf meinem anderen PC gibt es eine Anwendung, die die neueste Messung unter einem Timer abruft, so dass Messungen, die von der Anwendung auf meinem ersten PC hinzugefügt wurden, erneut durchgeführt werden sollten.

Das Problem ist es nicht. Beim Start meiner Anwendung werden alle Daten aus der Datenbank zwischengespeichert und nie neue Daten hinzugefügt. Ich benutze Refresh() -Methode, die gut funktioniert, wenn ich eine der zwischengespeicherten Daten ändern, aber neu hinzugefügte Daten nicht aktualisiert.

Hier ist meine Methode, die die Daten aktualisieren soll:

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. Anwendungen haben unterschiedliche Verbindungszeichenfolgen in app.config (unterschiedliche Konten für dieselbe Datenbank).

+0

Sie meine Antwort hier überprüfen http://stackoverflow.com/questions/1746941/objectcontext-refresh –

Antwort

9

sollte diese Arbeit:

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(); 
} 

Welchen Sinn macht Caching, wenn Sie speichern jedes Mal, wenn Sie es möchten, aktualisieren benutzen? Sie könnten es ändern:

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(); 
} 

Es auch in der Datenbank mit jedem Anruf nachschlagen, aber macht viel weniger Operationen.

+0

erste Lösung, die Sie noch nicht neu hinzugefügte Daten aus meiner Datenbank nicht erwähnt retrive. Ihre zweite Lösung, die ich erwartet zu arbeiten, funktioniert auch nicht. Ich würde es nicht bevorzugen, weil ich auf diese Weise jedes Mal, wenn ich die letzte Messung machen möchte, einen neuen Kontext in meiner Datenbank öffne. Wenn ich meine Anwendung neu starte, ruft es neue Daten ab, aber es wird nicht reaktiviert, wenn während der Anwendung etwas hinzugefügt wird. Gibt es eine Möglichkeit, dass verschiedene Konten, die ich für jede Anwendung verwende (eine, die hinzufügt und eine, die Daten aus der DB abruft), der Grund dafür sind? –

+0

@Nebo: Zweite Lösung funktioniert nicht? Was gibt es zurück? – LukLed

+0

Mit jeder dieser beiden Lösungen bekomme ich das gleiche wie ich schon hatte. Wenn ich eine Zeile in einer Measurements-Tabelle bearbeite (die beim Start der Anwendung abgerufen wurde), wird sie aktualisiert. Wenn ich jedoch eine neue Zeile hinzufüge, wird sie nicht wiederhergestellt. In beiden Fällen. Diesmal habe ich eine bestehende und neue Zeile direkt mit meinem SQL Manangement Studio bearbeitet. –

Verwandte Themen