Ich habe einen Customer der keine Reservierungen hat. Nun füge ich eine Reservierung hinzu. Jetzt würde ich erwarten das der EntityState für den Customer "Modified" ist. Dies ist allerdings nicht der Fall.
Dennoch scheint entities.SaveChanges() dem Customer in der DB erfolgreich eine reservation hinzugefügt zu haben.
Aber woran erkennt das System die Änderungen um sie dann entsprechend per SaveChanges wegzuschreiben?
bzw.: Wie kann ich diese Art von Änderung erkennen wenn nicht anhand von EntityState?
var entities = new BreakAwayEntities(); var customer = entities.Customers.First(p=>p.ContactID == 1); var res = entities.Reservations.First();
Das customer Objekt verändert sich ja nicht, deswegen bleibt sein Status auch. Du könntest dir die Anzahl der hinzugefügten Datensätze zurückgeben lassen:
Ja ich denke das führt mich näher an die Lösung. GetObjectStateEntries liefert mir einen Eintrag. Die Frage ist jetzt nur noch wie ich herausbekomme auf welchen Customer bzw. Reservation sich dieser Eintrag bezieht?!
Da bin ich mir nicht ganz sicher. Probier mal dich mit dem RelationshipManager zu befassen. Jeder ObjectStateEntry aus der obigen Abfrage liefert einen mit. Das sollte dir eigentlich helfen die verknüpften Objekte zu ermitteln.
Mir ist noch etwas eingefallen. Du könntest auch deine customer Klasse erweitern um eine entsprechende Prüfmethode (auf die Schnelle nur in VB.NET):
Public Function ChildsModified() As Boolean For Each child In Reservations If Not child.EntityState = Data.EntityState.Unchanged Then Return True End If Next Return False End Function
Dann kannst du damit problemlos prüfen ob ein Element hinzukam, gelöscht oder verändert wurde.
Das wäre auch eine Möglichkeit. Das müsste ich dann allerdings in jede Entität nachpflegen. Bitte schau dir mal die Frage in dem Kommentar zu deiner letzten Antwort an.
Betrifft das so viele Entitäten bei dir? Bin jetzt erstmal nur von der customer-Klasse ausgegangen. Was bezweckst du eigentlich mit dieser Ermittlung, vielleicht geht es ja auch ganz anders/einfacher.
Vom Prizip her will ich wissen welche entität in meinem DataContext verändert wurde... Bei Änderungen innherhalb von Entitäten kein problem. Sobald es allerdings mit Relations zu tun hat muss ich ein anderes Verfahren anwenden