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

Linq Discussion :

Utilisation d'une classe partielle pour étendre un modèle généré à partir de la BDD


Sujet :

Linq

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Utilisation d'une classe partielle pour étendre un modèle généré à partir de la BDD
    Bonjour,

    J'ai crée un projet web service qui se connecte sur une base sql server assez datée et "mal construite" dans le sens où il n'y aucune contrainte de clé étrangère.

    J'ai crée un modèle dbml des tables qui me sont utiles via l'interface graphique.

    Je peux donc accéder à mes données via des pseudo-requêtes au format linq to sql. Tout fonctionne parfaitement dans les cas simple.

    Cependant en raison de l'absence de contraintes (que je ne suis par ailleurs pas en mesure de créer), il m'est impossible d'accéder aux éléments enfants par les jointures "automatiques" de linq.

    Je dois donc écrire manuellement mes jointures dans mes requêtes. Pour plus de clarté je décide d'écrire en SQL via l'utilisation de ExecuteQuery.

    Efin de pourvoir remonter les informations construites par jointure je modifie mon modèle en ajoutant des champs dans un classe partielle, et en effectuant une déclaration de type [Column(Name = "type_libelle")].
    Ce faisant j'arrive bien à récupérer les informations que je recherche.

    Malheureusement lorsque par la suite je fais un insert dans la table j'obtiens une erreur SQL me disant que le champ "type_libelle" n'existe pas dans la table.
    Mon altération du modèle rend donc impossible la modification des données en base (ce qui n'est bien sur pas acceptable)!

    Une solution consisterai bien sur à coder la requete à l'ancienne avec utilisation de recordSet etc..., mais je ne trouve pas ça très satisfaisant.

    Auriez-vous une idée de comment procéder pour obtenir ce que je recherche sans me passer totalement des apports de linq?

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Avec entity Framework tu peux ajouter des relations sur les entité via le designer (clic droit, add relation). Regarde si c'est pareil avec linq to sql.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Effectivement il est possible d'ajouter des relations du type clé étrangère. Cependant je travaille sur une base "sale" et il y a des entrées en bases qui ne respectent pas les conditions nécessaires (par ex. un champ id faisant référence à une autre table laissé vide). La création du lien est impossible dans ce cas là:
    "types de données incompatibles"
    Cette solution n'est donc pas envisageable dans mon cas.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 119
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Dave Perry Voir le message
    Effectivement il est possible d'ajouter des relations du type clé étrangère. Cependant je travaille sur une base "sale" et il y a des entrées en bases qui ne respectent pas les conditions nécessaires (par ex. un champ id faisant référence à une autre table laissé vide). La création du lien est impossible dans ce cas là:
    Cette solution n'est donc pas envisageable dans mon cas.
    Et une mise à jour propre de la BDD n'est pas envisageable ?
    Car au lieu de toujours faire en sorte de palier ce problème de relations, autant regler le problème et savourez chaque requete LINQ to SQL que tu implémentera.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 133
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par toham Voir le message
    Et une mise à jour propre de la BDD n'est pas envisageable ?
    Car au lieu de toujours faire en sorte de palier ce problème de relations, autant regler le problème et savourez chaque requete LINQ to SQL que tu implémentera.
    Bingo ! Voilà la bonne réponse. Parfois on s'épuise à vouloir absolument préserver un existant pourri !
    dans certains cas, il vaut mieux rebâtir que de remettre encore des emplâtre sur une jambe de bois.
    Remodélises ta base, ajoutes-y toutes sortes de contraintes, importes les données anciennes dans le nouveau schéma et hop Linq !
    nachtigal

Discussions similaires

  1. Utilisation d'une classe connexion pour MySQL
    Par nolookpass8 dans le forum Développement Web en Java
    Réponses: 7
    Dernier message: 02/04/2013, 17h42
  2. Réponses: 0
    Dernier message: 08/12/2011, 23h26
  3. Réponses: 1
    Dernier message: 26/08/2008, 12h27
  4. Réponses: 9
    Dernier message: 25/06/2008, 16h42
  5. Réponses: 2
    Dernier message: 30/05/2006, 15h26

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