2010-12-14 39 views
6

Je suis relativement nouveau par rapport à EF et j'ai créé un modèle simple (voir ci-dessous) en utilisant EF4. Je rencontre un problème lors de l'insertion d'un nouvel enregistrement dans l'entité UserRecord et de l'ajout de l'entité UserDetail qui utilise le nouvel UserRecordId comme clé primaire. Le code ci-dessous fonctionnait lorsque ma base de données avait une relation un-à-plusieurs, mais lorsque je la change en une relation un-à-un, l'erreur est mise en surbrillance dans l'image ci-dessous. Je crois que cela ne fonctionne pas car il n'y a maintenant aucune propriété UserDetails associée à UserRecord car il s'agit maintenant d'une relation un-à-un. Ma question est comment puis-je maintenant insérer nouveau UserRecord et les entités UserDetail correspondantes avec une relation un-à-un?Entity Framework - Insertion dans plusieurs tables à l'aide de la clé étrangère

Toute aide sur celui-ci est très appréciée, comme cela a été le cas en cherchant sur le web et en essayant une variété de choses différentes sans succès.

Vive

Cragly

Répondre

15

Votre objet UserDetail devrait avoir une propriété qui établit un lien avec l'objet UserRecord. (Il est peut-être appelé User? Si je lis correctement la section de navigation ci-dessous.) Si vous définissez cette propriété sur votre nouvel objet UserRecord non validé, il remplira automatiquement la clé lorsqu'il validera les deux objets.

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

Fantastique !! Merci beaucoup fonctionne très bien. On dirait que j'essayais de le faire à l'envers et que j'essayais d'ajouter UserDetails à UserRecord plutôt que l'inverse. Tu m'as sauvé un peu plus de perte de cheveux que je peux économiser jusqu'à ce que j'atteigne mon prochain mur de briques EF! – Cragly

+0

Oui. J'ai essayé de nombreuses autres façons dans mon système, y compris une tentative de validation en deux phases. C'est la seule chose qui a fonctionné pour moi, et c'est exceptionnellement élégant et intuitif pour démarrer. – jdmichal