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

ASP.NET MVC Discussion :

[EF Code First] Relations entre tables


Sujet :

ASP.NET MVC

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut [EF Code First] Relations entre tables
    Bonjour,

    J'abuse du forum, mais je suis sur EF First Code et y a pas beaucoup de sources. Je suis donc en train de mettre en place mes classes de modeles. J'ai une classe Demande:
    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 class Demande
        {
            public int DemandeId { get; set; }
            public string Titre { get; set; }
              ...
            public int VendeurID { get; set; }
            public int ResponsableID { get; set; }
     
            //foreign key vers le vendeur qui a fait la demande, une demande est liée à un responsable
            public virtual User Vendeur { get; set; }
            //foreign key vers le responsable de la demande, une demande est liée à un responsable
            public virtual User Responsable { get; set; }
            //Une demande peut avoir plusieurs documentations rattachées et //plusieurs message
            public virtual ICollection<Documentation> Documentations { get; set; }
            public virtual ICollection<Message> Messages { get; set; }      
        }
    }
    Donc elle contient l' id d'un vendeur et d'un responsable qui sont de la classe user. J'ai aussi une "navigation properties" vers les documentations et les messages relatifs à cette demande...c'est un accesseur à l'objet qui est créé à partir de la ligne de la table référencée ,de ce que j'ai compris,bien pratique...quand ça marche.

    J'ai ensuite ma classe user:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     public class User
        {
            public int UserId {get;set;}
             ...
            //On declare l'enumeration pour gere les rôles
            public Role Role { get; set; }
            public int RoleValue { get { return (int)Role; } set { Role = (Role)value;
     
            //je veux faire reference aux demandes qui concerne un responsable ou         //un vendeur
            public virtual ICollection<Demande> Demandes { get; set; }
     } }
     
        }
    Dans mon controleur, je passe la liste de toute les demandes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     public ActionResult Index()
            {
                return View(db.Demandes.ToList());
            }
    Les informations de chaque demandes sont ensuite affichées dans un tableau de la vue, et ma question arrive, pas de probleme pour afficher les elements de la table demande, par contre si je demande d'afficher le nom du vendeur ou du responsable, j'ai un blanc sans erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @foreach(var item in Model){
         <tr>
            <td>@Html.DisplayFor(modelItem =>item.DemandeId)</td>
            <td>@Html.DisplayFor(modelItem =>item.Titre)</td>
            <td>@Html.DisplayFor(modelItem =>item.Vendeur.Nom)</td>
            <td>@Html.DisplayFor(modelItem =>item.Responsable.Nom)</td>
    Donc, meme si la complétion me propose de mettre Vendeur.Nom, je pense qu'il me manque quelquechose en base pour gérer les relations.

    Sur le tuto de windows(lien) pour creer un modele complexe, on trouve une fonction qui définie ou redefinie les relations, mais ils ne définissent pas toutes les relations dedans. Cette relation serait une many-to-one? comment le dire au EF?

    Bonne journée

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 27
    Par défaut
    Salut,

    Voici ce que j'aurai mis dans la classe Demande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public int VendeurId { get; set; }
    public int ResponsableId { get; set; }
    [ForeignKey("VendeurId ")] 
    public virtual User Vendeur { get; set; }
    [ForeignKey("ResponsableId ")] 
    public virtual User Responsable { get; set; }

    Pour ce qui est de la doc, J'ai trouver pas mal de truc sur les liens ci-dessous:

    http://weblogs.asp.net/scottgu/archi...a-mapping.aspx
    http://weblogs.asp.net/scottgu/archi...amework-4.aspx
    http://blog.stevensanderson.com/2011...lding-package/

    Bonne lecture ;-)

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut
    Salut, tout d'abord merci de t’intéresser à mon problème et pour les liens, je connaissait le blog de ScottGu mais seulement parcouru. Sinon au sujet du flag [ForeignKey("VendeurId ")], il n'est pas reconnu dans ma config, y a t'il un using preçis à utiliser?

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 27
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    using System.ComponentModel.DataAnnotations;

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut
    Salut,
    Donc j'ai testé le flag "foreign key" et je tombe sur une erreur d'insertion de données (dans ma fonction initializer qui régénère la base à chaque modification du modèle). J'ai donc un modèle comme ceci:



    Je n'ai représenté que les attributs de liaison. Donc je lance l'application qui me retourne l'erreur quand elle tente d'insérer une documentation:
    The INSERT statement conflicted with the FOREIGN KEY constraint "Demande_Vendeur". The conflict occurred in database "Db_Customs", table "dbo.Users", column 'UserId'.
    The statement has been terminated.
    .

    Donc je ne comprends pas, c'est une erreur de conception? Je ne vois pas le lien entre ma table documentation et la table user, si ce n'est qu'elles référencent toutes les deux l'Id de Demande...gros doute sur mes connaissances en BD...

    Bonne journée à tous,

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut
    Qui est le ***** qui a fait commencer l'auto-increment à 1?... Dans mes jeux de test du initializer, j'étais parti comme avec une base MySQL ou Oracle à l'indice 0, donc enregistrement inexistant, donc reference sur une Foreign Key inexistante, yesss 3h à glander et 10minutes à pleurer. Allez, j’essuie mes larmes, je repars et j'avance au maximum avant de revenir vous voir.

    Au passage, merci Feez pour la foreign key et les articles. Le flag est utile quand le nom de la foreign key en question n'est pas le même que la table à referencer il me semble.

    Bonne aprem.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] les relations entre tables access avec un code vb.net
    Par Walid(Tun) dans le forum VBA Access
    Réponses: 5
    Dernier message: 13/10/2010, 22h31
  2. Réponses: 2
    Dernier message: 19/05/2009, 14h16
  3. Créer par code des relations entre tables d'une même base ?
    Par AndréPe dans le forum Modélisation
    Réponses: 2
    Dernier message: 21/11/2007, 18h27
  4. Récupération des relations entre tables
    Par Themacleod1980 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/02/2006, 11h34
  5. relations entre tables
    Par ilyassou dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/11/2005, 07h48

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