2010-12-14 16 views
6

Jestem względną nowością w EF i stworzyłem prosty model (patrz poniżej) przy użyciu EF4. alt textEntity Framework - Wstawianie do wielu tabel przy użyciu klucza obcego

Mam problem z wstawieniem nowego rekordu do encji UserRecord, a następnie dodaniem encji UserDetail, która używa nowo utworzonego UserRecordId jako swojego klucza głównego. Poniższy kod zadziałał, gdy moja baza danych miała relację jeden-do-wielu, ale kiedy zmieniam to na relację jeden-do-jednego, błąd został podświetlony na poniższym obrazku. alt text

Wierzę, że nie działa, ponieważ nie ma teraz właściwości UserDetails związanej z UserRecord, ponieważ jest to obecnie relacja jeden-do-jednego. Moje pytanie brzmi: jak teraz wstawić nową UserRecord i odpowiadające jej jednostki UserDetail w relacji jeden-do-jednego?

Każda pomoc w tej sprawie jest bardzo ceniona, ponieważ przeszukiwaliśmy sieć i próbowaliśmy różnych rzeczy bez powodzenia.

Cheers

Cragly

Odpowiedz

15

UserDetail Twój obiekt powinien mieć właściwość, że linki do obiektu UserRecord. (Może jest to nazywane User? Jeśli czytam sekcję nawigacyjną poniżej poprawnie.) Jeśli ustawisz tę właściwość na nowy, niezatwierdzony obiekt UserRecord, automatycznie wypełni on klucz, gdy zatwierdzi oba obiekty.

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

Fantastyczne !! Bardzo dziękuję za pracę. Wygląda na to, że próbowałem zrobić to w niewłaściwy sposób i chciałbym dodać UserDetails do UserRecord, a nie odwrotnie. Uratowałeś mi trochę więcej wypadania włosów, które mogę ocalić, dopóki nie uderzę w kolejną ceglaną ścianę EF! – Cragly

+0

Tak. Próbowałem w moim systemie na wiele innych sposobów, łącznie z próbą zatwierdzenia dwufazowego. To jest jedyna rzecz, która zadziałała dla mnie i jest wyjątkowo elegancka i intuicyjna w obsłudze. – jdmichal

Powiązane problemy