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 :

clé etrangère, liaison table 1-*


Sujet :

Entity Framework

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    Points : 202
    Points
    202
    Par défaut clé etrangère, liaison table 1-*
    bonjour,
    Je travail sous visual studio 2008 SP1 avec le framework MVC2, .net3.5 et EF.
    Je suis en stage pour une entreprise qui a développé son propre CMS en asp.net webform et qui souhaite le passé en asp.net MVC2. Je suis donc charger pour l'instant de développer une maquette du projet. Pour cela j'ai repris la base de donnée existante et j'ai généré le model avec EF. voici les tables que j'ai isolé pour la maquette:
    Nom : maquette BD.JPG
Affichages : 665
Taille : 37,3 Ko
    Lors de la génération du model entity les trois champs de clé étrangères "idWsgThemeWsgPage, idWsgMasterpageWsgPage et idWsgPageRegroupementWsgPage" de la table WsgPage on été supprimé car il sont passé en propriété de navigation. Le probleme est que dans ma maquette l'utilisateur doit pouvoir faire les opération de CRUD sur la table Wsgpage, j'ai donc besoin de ses trois champs. Comme je suis débutant dans le développement asp.net sous les framwork MVC2 et EF j'ai d'abord essayez de me débrouiller avec le model de base que EF m'avais généré mais cela c'est avéré trop compliqué voir irréalisable. J'ai donc posté un premier message sur le forum asp.net MVC ou l'on ma orienté vers l'idée de modifier le model. Ce que j'ai essayé de faire sans grand succès... J'ai d'abord ajouté les trois champs de clé étrangère qu'il me manquai dans la table WsgPage puis je les est mappés au champs correspondant:
    Nom : mapping champ Wsgpage.JPG
Affichages : 654
Taille : 54,2 Ko
    Puis dans les trois lien entre les table:
    Nom : mapping cle étrangère.JPG
Affichages : 627
Taille : 14,2 Ko

    Ceci fait j'essaie de valider mon model et la j'ai l'erreur suivante pour mes trois liens:
    Erreur 3 Erreur 3007*: Problème de fragments de mappage à partir des lignes 3601, 3946*: Une ou plusieurs colonnes de clés non primaires [idWsgMasterpageWsgPage] sont mappées dans les deux fragments à des propriétés différentes côté conceptuel*: une incohérence des données est possible, car les propriétés correspondantes côté conceptuel peuvent être modifiées de manière indépendante.
    Ce que j'ai fait me parait au premier abord plutôt logique donc je ne voie pas comment corriger cette erreur se qui est problématique pour le développement de la maquette. Toutes suggestions sont les bien venus
    Merci d'avance pour le temps passé sur mon problème.
    Cordialement

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    Points : 202
    Points
    202
    Par défaut
    bonjour,
    Je suis un peut déçus de voir qu'encore personne n'a pu me donner une petite piste sur mon problème. En fouillant sur les forums anglais j'ai fini par trouver le pourquoi de l'erreur. EF ne permet pas qu'un champ soit a la fois une propriété scalaire et de navigation (se qui est le cas dans mon model actuellement). Par contre je ne vois toujours pas comment contourner le problème.
    Une solution me vient a l'esprit qui serai de modifier la base de données mais cela me parait un peu extrême et allant a l'inverse du but d' EF qui est d'adapter le model crée par EF à partir de la BD pour faciliter le développement des applications orientées objet et non pas d'adapter la BD à EF...
    Si une personne a une suggestion elle est la bien venu.
    cordialement.

  3. #3
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par darkcrift Voir le message
    EF de permet pas qu'un champ soit a la fois une propriété scalaire et de navigation (se qui est le cas dans mon model actuellement).
    En 3.5 effectivement ce n'est pas possible, mais en 4.0 oui...

    Une solution possible est de ne pas représenter la clé étrangère dans ton modèle, mais de suivre la propriété d'association pour y accéder. Par exemple, si tu as un entité Produit et une entité Catégorie, tu ne mets pas dans ton modèle la propriété IDCatégorie dans Produit, mais tu y accèdes en faisant produit.Catégorie.ID

  4. #4
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    Points : 202
    Points
    202
    Par défaut
    bonjour,
    Oui j'ai vu il y a quelque minute que EF 3.5 ne gérai pas complètement les clés étrangères mais que la version 4.0 le faisait. Je suis passé par les propriétés de navigation en effet pour atteindre les tables liées; voir le premier poste sur le sujet :
    http://www.developpez.net/forums/d10...peration-crud/
    Mais mon problème est qu'en passant par les propriétés de navigation je n'arrive pas a modifier (lors d'un upload par exemple)les champs correspondant à mes clés étrangères, je ne vois d'ailleurs pas comment cela pourrai se faire puisqu'il n'existe pas dans le modèle...
    Le plus simple en terme de développement serai de passer à VS 2010 avec le EF 4.0 et MVC3 mais cela implique des problèmes de compatibilité avec les serveurs, logiciel et autre existant et je ne sais pas si cela sera réalisable.
    cordialement

  5. #5
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par darkcrift Voir le message
    Mais mon problème est qu'en passant par les propriétés de navigation je n'arrive pas a modifier (lors d'un upload par exemple)les champs correspondant à mes clés étrangères, je ne vois d'ailleurs pas comment cela pourrai se faire puisqu'il n'existe pas dans le modèle...
    Il suffit de modifier la propriété de navigation... Pour reprendre mon exemple précédent, au lieu de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    produit.IDCatégorie = x;
    Il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    produit.Catégorie = db.Catégories.Single(c => c.ID == x);

  6. #6
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    Points : 202
    Points
    202
    Par défaut
    bonjour,
    Merci pour la rapidité de la réponse ça à l'air bien je vais essayer tout ça dans la journée.
    cordialement

  7. #7
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 85
    Points : 47
    Points
    47
    Par défaut
    merci tomlev pour ta réponse très très utile
    je cherche déja à poser la même question et voilà que j'ai eu la belle réponse
    bingooooo
    gro merci

  8. #8
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Ou alors utiliser une approche "Ghost" pour éviter un allé retour en base proviqué par cette opération

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    produit.Catégorie = db.Catégories.Single(c => c.ID == x);
    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var cat = new Category { ID = x };
    produit.Catégories.Attach(cat);
    produit.Catégorie = cat;

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

Discussions similaires

  1. Liaison table formulaire
    Par BOUBOU81 dans le forum Access
    Réponses: 5
    Dernier message: 27/07/2006, 16h34
  2. Liaison tables access
    Par Pierren dans le forum Access
    Réponses: 11
    Dernier message: 07/07/2006, 17h06
  3. liaison tables
    Par DaNni dans le forum Access
    Réponses: 4
    Dernier message: 29/03/2006, 21h34
  4. Réponses: 5
    Dernier message: 15/11/2005, 08h57
  5. Liaison table / Formulaire
    Par HE dans le forum Access
    Réponses: 2
    Dernier message: 08/09/2005, 09h32

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