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 :

Entity Framework : Une entité pour 2 tables : « Problèmes de fragments de mappage… »


Sujet :

Entity Framework

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut Entity Framework : Une entité pour 2 tables : « Problèmes de fragments de mappage… »
    Bonjour à tous,

    Comme il est possible avec les dataset de créer une DataTable prenant les données de plusieurs tables (join), j’essaye de créer une entité pour 2 tables.

    Mon problème :



    Ici, j’aimerai que l’entité Correctif comporte en plus un champ de la table Charge. C’est le champ « complement ». Je voudrais qu’il soit accessible en lecture pour l’afficher sur chaque ligne de la GridView bindé sur mon entité Correctif.

    Mais problème à la compilation, j’ai cette erreur qui survient :

    Erreur 3024 : Problème de fragments de mappage à partir de la ligne 541 oit spécifier le mappage de toutes les propriétés de clé (Correctif.numLotNature, Correctif.numCharge) de l'EntitySet Correctif.
    • Cela provient du fait que j’essaye de regrouper au sein d’une entité 2 tables dont la relation est (1,n) et que cela est impossible ?
    • Ou ai-je mal fait quelque chose ?


    Merci de votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut
    bonjour,
    D'après moi ton erreur provient du fait qu'il est impossible
    de regrouper au sein d’une entité 2 tables dont la relation est (1,n)
    Après je ne suis pas un professionnel non plus et je me trompe peut être, enfin j'espère pas
    Si tu veut simplement afficher un champ de l'autre table je ne voit pas pourquoi tu ne passe pas par les propriétés de navigation.
    cordialement

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut
    Bonjour,

    Je suis à nouveau sur le sujet ^^

    C'est peu être effectivement la solution d'ajouter une proprièté à la Classe de l'entité qui référence la propriété dans l'autre Classe...

    Je fouille actuellement le designer.cs

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut
    J'ai rajouté ça dans le designer :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public partial class Correctif : EntityObject
            ...
            public global::System.String complement
            {
                get
                {
                    return this.Charge.complement;
                }
            }
            ...
    }

    Et effectivement ça marche. Je pense qu'il va falloir le mettre dans un autre fichier partial class pour éviter que le tout soit supprimer du designer.cs à chaque génération.

    Le problème restant est que mon champs n’apparaît pas dans le Designer, ce qui est asses embêtant. car lors de la création de grille il va falloir rajouter ce champs à la main, etc... Je pense qu'il doit y avoir moyen de le faire apparaître en rajoutant des ligne dans le fichier xml edmx, mais comment et où...

  5. #5
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Le problème restant est que mon champs n’apparaît pas dans le Designer
    Vous vous servez du designer?


    public partial class Correctif : EntityObject
    ...
    public global::System.String complement
    {
    get
    {
    return this.Charge.complement;
    }
    }
    ...
    }
    Pourquoi faites vous cela? car vous n'arrivez pas à afficher une propriété de navigation dans votre designer?

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut
    Concrètement, je veux afficher et éditer (DataBind) dans une GridView les enregistrements de la table appelée "Correctif". Mais, en plus des 6 champs existants, je voudrais rajouter un champ, sur chacune de ces lignes dans la GridView. Ce champ prendra la valeur du champ "complément" de la table "Charge". Table "Charge" qui est liée (relation 1..n avec clé numCharge) à ma table "Correctif".

    L'entité Correctif devrait donc idéalement comprendre un septième champ appelé Complément, qui prend sa source sur la table Charge. Or je n'arrive pas à spécifier la source par le biais du designer... cela déclanche une erreur... on ne peut probablement pas...

    Je l'ai donc simplement ajouté en tant que propriété à ma classe Correctif. Complément prend sa source sur this.Charge.complément.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public partial class Correctif : EntityObject {
            ...
            public global::System.String complement
            {
                get
                {
                    return this.Charge.complement;
                }
            }
            ...
    }
    Cela fonctionne.
    C'est à dire que lorsque que je requête avec du linq : la propriété complément de mes objets Correctif contiennent les données du champ complément de la table Charge.

    Mais... le must serait d'arriver quand même à ajouter ce champs au designer. Car je vais créer plusieurs GridView... et il y aura d'autres cas similaires. Et il faudra que je rajoute tous ces champs à la main dans la liste des champs de chacunes des table... etc... etc... De plus le modèle de données sera à lui seul encapsulé dans une dll à destinnation d'autre utilisateurs... donc il me faut un bricolage plus solide. Voilà

    Ca peut paraitre coppliquer mais bon... dans un dataset on peut simplement créer une datatable basé sur plusieurs table (join) et gérer nous même les SELECT, UPDATE, etc...

Discussions similaires

  1. Une entité pour 2 tables identiques
    Par 18carats dans le forum Entity Framework
    Réponses: 3
    Dernier message: 21/06/2012, 14h43
  2. Réponses: 2
    Dernier message: 16/12/2010, 14h31
  3. Création d'une vue pour deux tables
    Par Athanor027 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 26/10/2010, 07h10
  4. [EJB3 Entity] traduction d'une entité classe en table
    Par ndeyemaroc dans le forum Java EE
    Réponses: 0
    Dernier message: 23/11/2009, 14h34
  5. [MCD] une entité pour UN employeur ?
    Par Goundy dans le forum Schéma
    Réponses: 4
    Dernier message: 01/04/2008, 20h25

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