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

Framework .NET Discussion :

Entity et Oracle, table changée en association


Sujet :

Framework .NET

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut Entity et Oracle, table changée en association
    Bonjour à tous ,



    j'essaie de faire un projet web MVC 4 qui travaillerait en parrallèle avec une base de données Oracle.



    Dans cette base de données, je dispose de plusieurs tables dont les trois suivantes :

    X_TRVS;

    X_MATERIAL;

    X_TRVS_MATERIAL;

    Cette dernière fait le lien entre les deux premières car elle contient uniquement les clés primaires des deux autres. Lorsque je visualise ma base avec le logiciel TOAD, elle est bien considéré comme une table.

    Cependant, lorsque je crée un fichier ADO.NET Entity Data Model dans le fichier "Model" de mon projet, cette table n'apparaît plus dans le schéma relationnel (désolé si j'utilise des termes inappropriés, je ne suis pas sûr). Ce que j'ai pu m'apercevoir c'est de la présence de cette table dans les configuration de mon fichier .edmx et elle semble être considéré comme une association.

    Donc le problème c'est qu'aucune classe n'a été générée pour cette table et j'aimerais quand même avoir accès aux données qu'elle contient comme tout autre tables.

    Avez vous une idée ?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par paladice Voir le message
    Donc le problème c'est qu'aucune classe n'a été générée pour cette table et j'aimerais quand même avoir accès aux données qu'elle contient comme tout autre tables.
    Pourquoi au juste ? Si cette table contient seulement des références à d'autres tables, c'est une association, pas une entité. A partir de là, je ne vois pas très bien ce que ça pourra t'apporter d'accéder directement à ses données...

    Tu peux toujours faire une requête SQL directement sur la table, mais demander à un ORM de considérer comme une entité quelque chose que n'en est pas une, ça ne peut apporter que des problèmes...

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Ah oui, donc si je comprends bien, les deux classes qui sont créée contiennent des champs qui correspondent aux champs contenues à la base dans la troisième table qui s'est transformée en association ?

    Merci pour ta réponse

    Edit : Je viens donc de vérifier.
    La classe correspondant à la table X_TRVS contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public virtual ICollection<X_MATERIAL> X_MATERIAL { get; set; }
    Tandis que la classe X_MATERIAL contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public virtual ICollection<X_TRVS> X_TRVS { get; set; }
    Il y a donc bien une association entre ces deux classes si j'ai bien compris ^^.

    Maintenant, comment récupérer les valeurs :/. Je suppose qu'avec les fonctions "where< >"... je le pourrais. Mais à la base la table X_TRVS est représentée par deux clés primaires. Ce qui voudrais dire que X_MATERIAL retourne deux valeurs non ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par paladice Voir le message
    Ah oui, donc si je comprends bien, les deux classes qui sont créée contiennent des champs qui correspondent aux champs contenues à la base dans la troisième table qui s'est transformée en association ?
    Oui, c'est le principe d'une association... Si tu as 2 entités A et B qui ont chacune une clé primaire ID, et une table C qui a juste des colonnes A_ID et B_ID qui font référence aux clés de A et B, alors C est une association

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    D'accord, merci pour cette confirmation

    Qu'est ce que je peux faire de ces iCollection du coup ?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par paladice Voir le message
    Qu'est ce que je peux faire de ces iCollection du coup ?
    C'est-à-dire ? Je comprends pas ta question

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Je ne suis pas sûr de comprendre ma question non plus

    Non plus sérieusement, je suis juste pas assez clair ^^. Comme je n'ai pas de table représentant l'association, je suppose que mes deux tables présentent contiennent des éléments permettant d'identifier cette association.

    Concrètement, j'ai la classe suivant :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    //------------------------------------------------------------------------------
    // <auto-generated>
    //    Ce code a été généré à partir d'un modèle.
    //
    //    Des modifications manuelles apportées à ce fichier peuvent conduire à un comportement inattendu de votre application.
    //    Les modifications manuelles apportées à ce fichier sont remplacées si le code est régénéré.
    // </auto-generated>
    //------------------------------------------------------------------------------
     
    namespace ProjetPMT.Models
    {
        using System;
        using System.Collections.Generic;
     
        public partial class PMT_MATERIAL
        {
            public PMT_MATERIAL()
            {
                this.PMT_TREVES = new HashSet<PMT_TREVES>();
            }
     
            public decimal ID_MATERIAL { get; set; }
            public string NAME_MATERIAL { get; set; }
            public decimal ID_FAM2 { get; set; }
            public string COD_MATERIAL { get; set; }
            public string UNIT { get; set; }
     
            public virtual PRODUC_FAM2 PRODUC_FAM2 { get; set; }
            public virtual ICollection<PMT_TREVES> PMT_TREVES { get; set; }
        }
    }
    Et une autre :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    //------------------------------------------------------------------------------
    // <auto-generated>
    //    Ce code a été généré à partir d'un modèle.
    //
    //    Des modifications manuelles apportées à ce fichier peuvent conduire à un comportement inattendu de votre application.
    //    Les modifications manuelles apportées à ce fichier sont remplacées si le code est régénéré.
    // </auto-generated>
    //------------------------------------------------------------------------------
     
    namespace ProjetPMT.Models
    {
        using System;
        using System.Collections.Generic;
     
        public partial class PMT_TREVES
        {
            public PMT_TREVES()
            {
                this.PMT_MATERIAL = new HashSet<PMT_MATERIAL>();
            }
     
            public decimal ID_PMT { get; set; }
            public System.DateTime DATE_PMT { get; set; }
            public decimal ID_USER { get; set; }
            public decimal YEAR_PMT { get; set; }
            public decimal ID_VEH { get; set; }
            public decimal ID_PLANT_OEM { get; set; }
            public decimal ID_FAM2 { get; set; }
            public string VERSION { get; set; }
            public decimal ID_PLANT_TREVES { get; set; }
            public string PRODUC_COMMENT { get; set; }
            public string EXTERNAL { get; set; }
            public decimal USAGE_PER_VEH { get; set; }
            public decimal PRICE { get; set; }
            public string CODE_CURR { get; set; }
            public decimal EQUIPMENT_RATE { get; set; }
            public string CODE_MTP { get; set; }
            public string BUSINESS_RENEWAL { get; set; }
            public string PROXIMITY { get; set; }
            public string TECHNOLOGY { get; set; }
            public string INVESTMENT { get; set; }
            public System.DateTime SOP { get; set; }
            public Nullable<System.DateTime> RFQ { get; set; }
            public Nullable<System.DateTime> SOURCING { get; set; }
     
            public virtual CURRENCY CURRENCY { get; set; }
            public virtual MTP_LABEL MTP_LABEL { get; set; }
            public virtual PLANT_TREVES PLANT_TREVES { get; set; }
            public virtual USERS USERS { get; set; }
            public virtual VEH_PLANT VEH_PLANT { get; set; }
            public virtual PRODUC_FAM2 PRODUC_FAM2 { get; set; }
            public virtual PMT_YEAR PMT_YEAR { get; set; }
            public virtual ICollection<PMT_MATERIAL> PMT_MATERIAL { get; set; }
        }
    }
    Je suppose que l'association entre ces deux tables est représenter par les deux instructions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public virtual ICollection<PMT_MATERIAL> PMT_MATERIAL { get; set; }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public virtual ICollection<PMT_TREVES> PMT_TREVES { get; set; }
    Seulement, comment puis-je acceder aux informations d'une ICollection ?
    Surtout que la clé primaire de PMT_TREVES est composée d'ID_PMT et de DATE_PMT :/
    Désolé si je ne comprends pas du premier coup lol. Je n'ai pas trouvé grand chose sur Entity Framework et les associations :/

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par paladice Voir le message
    Je suppose que l'association entre ces deux tables est représenter par les deux instructions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public virtual ICollection<PMT_MATERIAL> PMT_MATERIAL { get; set; }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public virtual ICollection<PMT_TREVES> PMT_TREVES { get; set; }
    Oui c'est ça

    Citation Envoyé par paladice Voir le message
    Seulement, comment puis-je acceder aux informations d'une ICollection ?
    Bah comme n'importe quelle collection: foreach, Add, Remove...

    Citation Envoyé par paladice Voir le message
    Surtout que la clé primaire de PMT_TREVES est composée d'ID_PMT et de DATE_PMT :/
    Ca c'est bizarre parce que le code ne le reflète pas du tout... tu l'as bien indiqué dans ton modèle ? Il y a bien une petite clé sur ces colonnes ?
    Parce que là le code généré utilise un HashSet, mais avec le comparateur par défaut, donc ça ne tient pas compte de la clé primaire.

  9. #9
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Merci pour tes réponses. Je pense pouvoir m'en sortir avec le foreach

    Oui, lorsque je regarde dans Toad, je trouve la confirmation que les deux champs ID_PMT et DATE_PMT sont en clé primaire de la table. Mais j'ai réussi à faire quelques petites instructions hier et j'ai l'impression que ça ne posera pas de problème.

    Merci encore

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par paladice Voir le message
    Oui, lorsque je regarde dans Toad, je trouve la confirmation que les deux champs ID_PMT et DATE_PMT sont en clé primaire de la table.
    Oui mais dans le modèle Entity Framework je veux dire ? Si l'ORM ne sait pas que c'est la clé primaire, ça ne marchera pas correctement...

  11. #11
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Merci pour ton aide. Désolé de répondre si tardivement, je n'avais pas vu tous de suite que tu avais répondu.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/04/2012, 23h02
  2. [MySQL] Prendre la valeur d'une table et l'associer à la valeur d'une autre
    Par gandolfi dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/02/2008, 08h04
  3. Réponses: 8
    Dernier message: 25/01/2008, 14h38
  4. hiérarchie sur une table et contrainte associée
    Par rock'roll dans le forum Débuter
    Réponses: 2
    Dernier message: 21/01/2008, 09h08
  5. Comment dupliquer la base oracle(table EMP ET DEPT)
    Par chevy dans le forum Administration
    Réponses: 1
    Dernier message: 17/05/2007, 14h11

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