2011-04-14 1 views
0

tenez compte du modèle exemple suivant:Comment créer une association 1x0..1 dans EF4 en utilisant Model-First?

  • Personne a 0..1 utilisateur
  • utilisateur a 1 personne

Tentative 1:

  • I traîné une association de Person à User sur le concepteur de modèle.
  • Je fixe la cardinalité pour répondre à mes besoins (la valeur par défaut est 1xN)
  • I généré le DDL du modèle

Problème:

  • Le tableau sortie User a une colonne Person_id sans contrainte unique. C'est-à-dire que ce n'est pas une relation 1x1 car de nombreux utilisateurs peuvent référencer la même personne. Il doit y avoir quelque chose qui cloche

Tentative 2:

  • Traîné une association d'une personne à l'utilisateur sur le concepteur de modèle.
  • fixe la cardinalité pour répondre à mes besoins (la valeur par défaut est 1xN)
  • Sélectionné l'association et cliqué sur le bouton Referential Constraint sur la fenêtre des propriétés pour modifier l'association
  • personne choisie pour être le principal et l'utilisateur d'être la personne à charge type de
  • choisi le Principal Key être Id et Dependent Property être aussi Id (je l'ai lu quelque part que je devrais utiliser la même clé pour les deux types)

problème:

I exécuter ce code:

using (var context = new Locadora()) 
{ 
    User user = new User(); 
    user.PasswordHash = "hash"; 
    user.Pessoa = new Person(); 
    user.Pessoa.Nome = "André"; 

    context.Usuários.AddObject(user); 

    context.SaveChanges(); 
} 
  • SaveChanges déclenche cette exception:

Une propriété dépendant d'une ReferentialConstraint est mappée sur une colonne générée en magasin. Colonne: 'Id'

Donc je suis hors de choix maintenant. Je ne sais pas comment implémenter une relation 1x1 ni une relation 1x0.1 dans Entity Framework.

Comment faire cela?

Répondre

1

La première tentative ne peut pas fonctionner car la version EF actuelle ne prend pas en charge les clés uniques. La deuxième approche ne fonctionne pas parce que l'entité dépendante ne peut pas avoir la clé autogénérée = StoreGeneratedPattern doit être définie sur None.

+0

Vous m'avez sauvé plusieurs fois aujourd'hui. Je vous remercie –

Questions connexes