2010-12-14 13 views
6

Ich bin ein relativ neues EF und haben ein einfaches Modell (siehe unten) mit EF4 erstellt. Entity Framework - Einfügen in mehrere Tabellen mit Fremdschlüssel

Ich habe ein Problem beim Einfügen eines neuen Datensatzes in die UserRecord-Entität und das anschließende Hinzufügen der UserDetail-Entität, die die neu erstellte UserRecordId als Primärschlüssel verwendet. Der unten gezeigte Code funktionierte, wenn meine Datenbank eine Eins-zu-viele-Beziehung hatte, aber wenn ich dies zu einer Eins-zu-Eins-Beziehung ändere, bekomme ich den Fehler in der Abbildung unten hervorgehoben.

Ich glaube, es funktioniert nicht, da es jetzt keine UserDetails -Eigenschaft mit dem UserRecord verbunden ist, da es jetzt eine Eins-zu-eins-Beziehung ist. Meine Frage ist, wie füge ich jetzt neue UserRecord und entsprechende UserDetail-Entitäten mit einer Eins-zu-Eins-Beziehung ein?

Jede Hilfe zu diesem wird sehr geschätzt, wie auf der Suche im Internet und versuchen eine Vielzahl von verschiedenen Dingen ohne Erfolg.

Prost

Cragly

Antwort

15

Ihr UserDetail Objekt sollte eine Eigenschaft hat, die das UserRecord Objekt verbindet zurück. (Es heißt vielleicht User? Wenn ich die Navigation Abschnitt unten richtig lesen.) Wenn Sie diese Eigenschaft auf Ihre neue, nicht committed UserRecord Objekt, wird es automatisch den Schlüssel ausfüllen, wenn es beide Objekte commits.

UserRecord userRecord = new UserRecord(); 
// whatever 

UserDetail userDetail = new UserDetail(); 
userDetail.User = userRecord; // This will auto-fill the FK during commit. 
// whatever 

// Add both userRecord and userDetail to the context and commit. 
+1

Fantastisch !! Danke sehr gut funktioniert. Es sieht so aus, als ob ich versucht habe, es falsch herum zu machen und UserDetails zu UserRecord hinzuzufügen anstatt umgekehrt. Du hast mir noch mehr Haarausfall erspart, den ich retten kann, bis ich meine nächste Stein-EF-Wand getroffen habe! – Cragly

+0

Ja. Ich habe es auf viele andere Arten in meinem System versucht, einschließlich eines Versuchs für ein zweiphasiges Commit. Dies ist das einzige, was für mich funktioniert hat, und es ist außergewöhnlich elegant und intuitiv zu booten. – jdmichal

Verwandte Themen