6

J'ai les entités suivantes sur mon EDMX: -. alt textavoir de sérieux problèmes avec Entity Framework et les clés étrangères :(

Ces deux ENTITES ont été générés par Mise à jour du modèle dans la base de données

maintenant , remarquez comment mon pays a la clé primaire suivante: -

Nom & IsoCodeC'est parce que chaque pays est UNIQUE dans le système par Name et IsoCode.

Maintenant, avec mes États ... c'est pareil. Clé primaire est: -

Nom & CountryId

Chaque état est unique par son nom et par pays.

Maintenant, la clé étrangère pour les états est un CountryId. C'est le sql: -

ALTER TABLE [dbo].[States] WITH CHECK ADD 
     CONSTRAINT [FK_States_Countries] FOREIGN KEY([CountryId]) 
REFERENCES [dbo].[Countries] ([CountryId]) 
ON UPDATE CASCADE 
GO 

ALTER TABLE [dbo].[States] CHECK CONSTRAINT [FK_States_Countries] 
GO 

Assez simple.

MAIS EntityFramework ne l'aime pas :(Il est en supposant que je dois relier certaines propriétés de State entité à la fois des propriétés de clé primaire dans l'entité Country.

Est-il possible d'ajouter une association entre pays et État sur Country.CountryId < -> State.CountryId ... comme je l'ai cartographié dans mon DB

;) Vive

+0

@Alex James: êtes-vous là pour aider, monsieur? –

+0

Yeap ... voir la réponse ci-dessous! –

Répondre

10

dans EF (3.5 et 4.0) FKs doit pointer vers les clés primaires?.

Mais vous semblez être tentant de pointer vers une clé candidate (c.-à-[pays]. [CountryId]

Je sais que cela est quelque chose que l'équipe EF envisagent pour la prochaine version bien :)

Hope this helps

Alex

+0

Merci Alex d'avoir répondu à ma question. J'apprécie sincèrement :) On dirait que je vais revenir à faire les identités les PK et ajouter des contraintes uniques. Doh :) toujours une longueur d'avance sur les constructions EF actuelles ... :) Merci encore mate - vraiment aimer votre aide :) continuez! –

+4

J'ai regardé les documents de changement CTP5 et je n'ai rien vu à ce sujet. Est-ce que cette fonctionnalité est toujours en cours d'examen, ou en cours de développement, ou ...? C'est une véritable pierre d'achoppement pour la cartographie des bases de données existantes. –

0

Pour une bonne normalisation DB, la première chose est que les clés primaires doivent être seulement CountryId et IdEtat champs - les champs Id principaux pour chaque table.

et ss je vois de la description Nom & IsoCode et Nom & CountryId devrait être en fait clés uniques, non primaires.

Ensuite, la classe modèle Etat devrait avoir un champ:

public Country Country { get; set; } 

maintenant EF ont de très bons exemples et depuis 4.3.1 + il soutient pleinement le code premier Les premiers modèles/DB, que je pense soulagera résoudre cela. EF 5 a plus de mises à jour de compatibilité, donc je pense que ce ne sera pas un problème pour les moteurs de base de données hérités.

+0

A moins que j'aie mal compris votre réponse - c'est complètement à côté du point de la question. "Est-il possible d'ajouter une ASSOCIATION entre Pays et Etat sur Country.CountryId <-> State.CountryId" est la question - comme dans "Puis-je ajouter une association sur autre chose qu'une clé primaire (la clé candidate dans ce cas) " – tim