IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entity Framework Discussion :

EF et propriété FK / navigation renommé


Sujet :

Entity Framework

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut EF et propriété FK / navigation renommé
    Bonjour,

    Je fais un peu joujou avec EF en ce moment, et je me retrouve face à un problème pour laquelle je n'arrive pas à trouver de solutions...

    Avant tout, voila le contexte:
    J'ai un EDMX, généré à partir de ma BDD, dans lequel je désactive la génération de code.
    Je génère donc mon propre code pour les Entities. Et c'est donc de là que viens mon soucis.

    J'ai une table User, et une table Email. La table Email à 2 FK vers User (expéditeur et destinataire).

    Mes entities simplifiées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    public partial class User
    {
    	public int id_User { get; set; }
     
    	public virtual ICollection<Email> Email_Exp { get; set; }
    	public virtual ICollection<Email> Email_Dest { get; set; }
    }
     
    public partial class Email
    {
    	public int id_User_Exp { get; set; }
    	public int id_User_Dest { get; set; }
     
    	public virtual User User_Exp { get; set; }
    	public virtual User User_Dest { get; set; }
    }

    Le problème est qu'EF ne reconnait de base pas le mapping entre mes Relations / FK.
    J'ai donc essayé de rajouter des attribut [ForeignKey], avec les noms correspondant, mais rien à faire, j'ai toujours l'erreur suivante:

    The required property 'User1' does not exist on the type 'Email'.
    Je suppose (j'espère) que je ne fais tout simplement pas comme il faut, mais qu'il est possible de nommer de façon spécifique les propriétés ?
    Et si oui, quelqu'un serait-il comment?

    J'avoue que je ne suis pas super alaise avec l'idée de nommer les propriétés de navigation User1, User2, etc...


    Merci d'avance

  2. #2
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    A ce que j'en lis, User1 n'existe pas, mais User_Exp et User_Dest oui.

    Sinon, tu es sur quelle version d'EF ? 3.5 ?
    Les clés étrangères ne pouvaient être inclue dans le 3.5, mais depuis le 4.0 cela fonctionne...
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Merci pour la rapide réponse, je suis en EF 4.1 si je ne dis pas de bêtises.

    Mon soucis c'est que EF veux trouver que la relation Email > User, se nomme User1.

    De mon coté, je veux la nommer selon sa fonction (Exp ou Dest). J'ai essayé de mettre l'attribut [ForeignKey], mais je ne le fait peut-etre pas correctement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public partial class User
    {
    	public int id_User { get; set; }
     
    	[ForeignKey("id_User_Exp")]
    	public virtual ICollection<Email> Email_Exp { get; set; }
    	[ForeignKey("id_User_Dest")]
    	public virtual ICollection<Email> Email_Dest { get; set; }
    }
     
    public partial class Email
    {
    	public int id_User_Exp { get; set; }
    	public int id_User_Dest { get; set; }
     
    	[ForeignKey("id_User_Exp")]
    	public virtual User User_Exp { get; set; }
    	[ForeignKey("id_User_Dest")]
    	public virtual User User_Dest { get; set; }
    }
    Les commentaires sur l'attribut et son constructeur ne sont pas super clair pour moi, donc je ne sais même pas si je passe le bon paramètres à l'attribut...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 201
    Points : 196
    Points
    196
    Par défaut
    Je me répond, j'ai finit par trouvé une solution !

    J'ai tout simplement changé la nom des propriétés dans l'EDMX, j'ai vu que dans ce model, les relations était nommé User1 / Email1 / ...

    Bon c'est un début de solution, car dans un model à deux tables, c'est simple. Mais j'ai des models avec plus d'une centaine de tables, et je trouve pas super pratique de devoir systématiquement renommé les propriété de navigation...

    Donc maintenant, je me demande s'il n'y aurai pas un attribut, ou un moyen autre, de désigner une propriété comme étant la déclaration d'une navigation ?

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [NavigationPropertyFor("User1")]
    public virtual User User_Exp { get; set; }
    Je sais pas si je suis clair ?

Discussions similaires

  1. propriétés de navigation dans GridView
    Par keryss dans le forum Entity Framework
    Réponses: 2
    Dernier message: 10/04/2011, 21h40
  2. Linq, Propriété de navigation et temps de réponse
    Par sephirostoy dans le forum Linq
    Réponses: 8
    Dernier message: 15/02/2011, 14h35
  3. Réponses: 5
    Dernier message: 08/10/2010, 15h34
  4. Propriété de navigation
    Par hech2007 dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 05/10/2010, 17h37
  5. [Linq to Sql] [C#] Propriété de navigation
    Par ClaudeBg dans le forum Accès aux données
    Réponses: 9
    Dernier message: 27/02/2009, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo