2013-04-02 2 views
1

Je travaille actuellement avec une base de données qui extrait des informations d'un autre système pour les manipuler. J'ai décidé d'utiliser Entity Framework et la première approche DB pour comprendre mon accès aux données. L'une des choses uniques à propos du projet est que j'utilise la clé d'entreprise du système externe comme la clé qui apparaîtra dans les tables associées, mais ce n'est pas la clé primaire dans mon système. J'utilise cette clé pour les relations dans les tables associées EG MyTable.ExternalId --> Review.ExternalId (ExternalId n'est PAS le pk dans la table parente). Pour cette raison, EF ne reconnaît pas la relation même si j'ai une contrainte de clé étrangère sur la table enfant rendant cette relation connue dans la base de données.EF v4 Relation de mappage sans clé primaire - DB First

Existe-t-il un moyen de remplacer EF pour lui dire d'utiliser l'ExternalId au lieu du PK pour construire la relation? Ou serait-il suggéré que je viens de changer la relation pour utiliser le PK de la table parent?

+1

Vous pouvez ajouter une nouvelle propriété de navigation en cliquant avec le bouton droit sur vos entités et en sélectionnant "Ajouter une nouvelle propriété de navigation". Ensuite, dans la fenêtre des propriétés, vous sélectionnez la clé étrangère à laquelle vous devez accéder dans la zone de sélection. Cette approche fonctionne-t-elle avec des clés étrangères qui ne pointent pas sur des clés primaires? Je considère comme une mauvaise pratique de créer des entités basées sur des clés étrangères qui ne sont pas des primaires. Vous devriez simplement utiliser des requêtes pour obtenir ceux à la place des propriétés de navigation à mon avis. –

+0

@jrosseel Le concepteur montre les clés étrangères, mais il ne montre pas les clés qui ne sont pas un PK dans une autre table. L'ExternalId a un index unique dessus. Je vois ce que vous dites à propos de la requête. – Justin

Répondre

1

EF doesn't support unique keys pourtant vous ne pouvez pas utiliser votre ExternalId comme identification de l'enregistrement principal dans la base de données. Vous devez soit utiliser ExternalId comme PK dans votre table ou construire une relation avec le vrai PK de la table principale.

Questions connexes