Ich habe Probleme, ein neues Objektdiagramm für den Kontext mit einer Eins-zu-viele-Beziehung zu verwenden. Ich verwende die Entity Framework 4.1-Version und implementiere einen Code-First-Ansatz. Ich verwende eine vorhandene SQL 2008-Datenbank und implementierte einen von DbContext abgeleiteten Kontext. Ich habe zwei Klassen, Person und Adresse. Eine Person kann 0 oder mehr Adressen enthalten, die als solche definiert sind.
%Vor%Ich versuche eine neue Instanz von Person mit zwei Adressen zu erstellen. Wenn ich jedoch diese Struktur zum Kontext hinzufüge und speichere, wird nur die erste Adresse in der Sammlung beibehalten. Bei der zweiten Eigenschaft ist die Eigenschaft "Personnavigation" auf "null" festgelegt und ist nicht mit dem Objekt "Person" verknüpft, jedoch ist das erste Objekt in der Liste verknüpft.
%Vor%Es wird keine Ausnahme ausgelöst, aber das zweite Objekt in der Address-Sammlung wird nicht gespeichert.
Hat jemand gute Ideen, warum nur der erste gerettet werden könnte? Danke.
Nach stundenlanger Fehlersuche / Versuch und Irrtum habe ich mein Problem gelöst. Meine POCO-Klassen werden auch in einer nicht verbundenen Umgebung verwendet, in der Die Objekte werden aus dem Kontext entfernt, geändert und dann erneut verknüpft.
Um zu bestimmen, welche Elemente der Navigationseigenschaft betroffen waren, habe ich übergangen Die Equals- und GetHashCode-Methoden in der Address-Klasse zur Bestimmung der Gleichheit. Offenbar beeinflusst dies die Fähigkeit von EF 4.1, eine vollständige Sammlung von Navigationseigenschaftsobjekten einzufügen?
Hier sind die ursprünglichen Gleichheitsmethoden, die das Problem verursacht haben:
%Vor%Um das Problem zu beheben, habe ich einen benutzerdefinierten Gleichheitsvergleich erstellt für das Navigationsobjekt, anstatt es direkt in die Adressklasse aufzunehmen.
%Vor%Mein Methodenaufruf context.People.Add funktionierte wie erwartet, nachdem ich diese Änderung vorgenommen hatte.
Wenn jemand weiß, warum das Überschreiben der Gleichheitsmethoden in der Klasse verursacht EF 4.1 nur den ersten Artikel in die Sammlung einfügen, das wäre großartige Information.
Wie bereits angedeutet, liegt das daran, dass die GetHashCode-Methode die ID aller Geschwister verwendet, die zum Zeitpunkt des Vergleichs durch Entity Framework 0 ist. Kommen Sie einfach dazu und Sie werden gut gehen.
Ich hatte genau das gleiche Problem und dieses Stück hat mich dazu gebracht. Ich habe mir nicht einmal die Mühe gemacht, meinen EntityBase-Code zu betrachten ... er ist so alt und hat sich bis jetzt nicht für immer verändert.
Also ein großes Dankeschön für Ihre Recherche!
Hier ist eine andere Möglichkeit, den Code hinzuzufügen. Einen Versuch wert. Dieser Code ist möglicherweise nicht genau, ich tippte freihändig.
%Vor%Tags und Links entity-framework-4.1