2016-08-16 6 views
1

Ich bin neu in EF und verwende Code 6.0 zuerst.Entity Framework kann die Tabellen nicht aktualisieren

using (EmpolyeeContext emp = new EmpolyeeContext()) 
{ 
    var callrecordSession = new CallRecordingSession(); 
    string ucid = new Random().Next(0, 5000).ToString(); 
    callrecordSession.UCID = ucid; 
    callrecordSession.InstrumentationTransactionId = new Random().Next(0, 9000).ToString(); 
    callrecordSession.ClientName = "IVR"; 
    callrecordSession.ClientRequestObject = "{string.empty}"; 
    callrecordSession.CallRecordingStatusName = "Started"; 
    callrecordSession.ModifiedDatetime = DateTime.Now; 

    emp.CallRecordingSessions.Add(callrecordSession); 

    var itemToEdit = emp.CallRecordingSessions.Where(c => c.UCID == ucid).FirstOrDefault<CallRecordingSession>(); 

    if (itemToEdit != null) 
    { 
     itemToEdit.CallRecordingStatusName = "Inprogress"; 
     itemToEdit.ModifiedDatetime = DateTime.Now; 
    } 

    emp.SaveChanges(); 
} 

Was ist mit diesem Code falsch? Ich bekomme immer itemtoEdit als null

Antwort

0

Entity Framework fragt immer die Datenquelle ab. Das ist Absicht. Wenn sie stattdessen Ihren lokalen Cache abgefragt haben, könnten Sie eine ID erhalten, die bereits von einem anderen Benutzer in der Datenbank eingefügt wurde. Auch das Entity-Framework muss Ergebnisse aus Ihrem Speicher und der Datenbank zusammenführen.

var itemToEdit = emp.CallRecordingSessions.Where(c => c.UCID == ucid).FirstOrDefault<CallRecordingSession>(); 

Also alles, was Sie tun müssen, ist die SaveChange aufrufen, bevor Sie die Daten zurück erhalten.

emp.CallRecordingSessions.Add(callrecordSession); 

emp.SaveChanges(); 

var itemToEdit = emp.CallRecordingSessions.Where(c => c.UCID == ucid).FirstOrDefault<CallRecordingSession>(); 

if (itemToEdit != null) 
{ 
    itemToEdit.CallRecordingStatusName = "Inprogress"; 
    itemToEdit.ModifiedDatetime = DateTime.Now; 
} 

emp.SaveChanges(); 
+0

ok danke, das funktioniert. Aber wundern Sie sich, wie dies in UnitOfWork-Muster funktioniert, wo mein Verständnis ist nur eine SaveChanges() wird verwendet, um die Änderungen (I/U/D) zu Datenquelle zu synchronisieren. – srieen

+0

Angenommen, Sie verwenden ein Repository mit Ihrem UnitOfWork-Muster, fügt die Methode add dem Repository die Daten nur zur lokalen Instanz von DbContext hinzu. Die Daten werden weiterhin nicht an die Datenbank übergeben, es sei denn, UnitOfWork .SaveChanges wird aufgerufen. Wenn Sie also zu Ihrem Repository hinzufügen und versuchen, die Daten zurück zu wählen, sollten Sie immer noch dasselbe Verhalten wie oben sehen, da UnitOfWork nur eine Abstraktionsebene hinzufügt. Am Ende speichert und holt UnitOfWork auch die Daten vom DbContext (in diesem Fall EmpolyeeContext). Überraschend, dass es in UnitOfWork-Muster funktionieren sollte! –

+0

Auch wenn ich Ihre Frage beantwortet habe, bitte markieren Sie wie beantwortet :) –

0

.SaveChanges() hat die Tricks gemacht.

Verwandte Themen