Hier ist mein Szenario:Silverlight & RIA & POCO: SubmitOperationFailed beim Einfügen von zwei neuen untergeordneten Entitäten. Eine Entität mit der gleichen ID existiert
Ich verwende Silverlight, RIA und POCO Objekte (kein Entity Framework; wir arbeiten gegen Oracle und SP's).
Ich habe ein Parent-Objekt, das eine Sammlung von Child-Objekten enthält. Ich habe die Attribute "Association" und "Composition" für das Parent ordnungsgemäß eingerichtet. Wenn ich Änderungen speichern möchte, wird das gesamte Objektdiagramm korrekt an den Server gesendet.
Der Benutzer kann dem Parent ein oder mehrere Child-Objekte hinzufügen.
Nun, wenn der Benutzer ONE Child-Objekt zum Parent hinzufügt und speichert es dann alles funktioniert. Wenn jedoch der Benutzer versucht, zwei oder mehr neue Objekte in der Mutter hinzuzufügen und dann bestehen bleiben, erhalte ich die klassischen Fehler:
System.ServiceModel.DomainServices.Client.DomainOperationException: Submit operation failed. An entity with the same identity already exists in this EntitySet. ---> System.InvalidOperationException: An entity with the same identity already exists in this EntitySet.
Nun, dies auf dem Client ausfällt. Ich verfolge alles - die Datenbank wird aktualisiert! Alles wird korrekt zum Server geschickt, die DB wird aktualisiert. Ich überprüfe die Objektschlüssel auf dem Server, wenn die Neuabfrage stattfindet und sie korrekt sind - alle neuen untergeordneten Objekte erhalten ihre ID von Null auf eine reelle Zahl in Folge aktualisiert.
Es ist, wenn ich das Parent-Objekt auf dem Client neu lade, bekomme ich diesen Fehler. Ich verstehe es nicht. Ich erstelle einen neuen Kontext für den Neuladevorgang. Es sollte leer sein und nur die Eltern und die zugehörigen Kinder laden. Ich überprüfe die Daten auf der Serverseite, bevor es die Abfragemethode verlässt - die Eltern- und Kinddaten sind in Ordnung. Also was passiert gerade? Warum schimpft mein Kontext darüber, dass ich diese SubmitOperation nicht abschließen kann?
Ich habe das herausgefunden. Im Grunde müssen Sie aufhören, Dinge manuell zu tun und RIA dies für Sie tun lassen. –