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

Accès aux données Discussion :

Domain Service class


Sujet :

Accès aux données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 23
    Points : 22
    Points
    22
    Par défaut Domain Service class
    Bonjour à tous,

    Je travaille actuellement sur un projet silverlight utilisant une base de données sql server 2008 r2.

    Voici le contenu de la table sur laquelle je veux effectuer une requête:
    Droit:
    • id : uniqueidentifier (PK)
    • Intervenant: : uniqueidentifier (FK Intervenant)
    • Projet : uniqueidentifier (FK Projet)
    • SousProjet : uniqueidentifier (FK SousProjet)
    • Espace : uniqueidentifier (FK Espace)
    • Bibliotheque : uniqueidentifier (FK Bibliotheque)

    Les 4 derniers champs peuvent être combinés de différentes manières (avec des valeurs null). Dans ma logique applicative, je n'ai en aucun cas ces 4 champs différents de null en même temps.
    Je cherche une méthode pour me renvoyer une liste d'"Intervenants" apparaissant dans la table "droit" avec les paramètres que je passe.
    La méthode ci dessous me retourne à chaque fois aucun élément et je ne comprends pas pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public IQueryable<Intervenant> GetIntervenantsDroit(Guid? projet, Guid? sousProjet, Guid? espace, Guid? bibliotheque)
            {
                return this.ObjectContext.Droits.Where(p => p.Projet == projet &&
    p.SousProjet == sousProjet && p.Espace == espace && p.Bibliotheque ==
    bibliotheque).Select(g => g.Intervenant1);
            }
    Il me semblerait que Entity framework n'arrive pas à comparer des valeurs "null".

    Merci pour vos réponses

  2. #2
    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 : 42
    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
    Points : 3 173
    Points
    3 173
    Par défaut
    Il me semblerait que Entity framework n'arrive pas à comparer des valeurs "null".
    Normalement si...

    p.SousProjet est bien un GUID?

    Pouvez vous poster la requête SQL générée?
    Au passage je vous déconseille fortement l'utilisation des GUID(uniqueidentifier) qui sont extrêmement contre-performant surtout en tant que PK/FK.

    Je suis d'ailleurs choqué que MS s'en soit servi pour les tables de gestion des aspnet_users, membership etc...

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Au passage je vous déconseille fortement l'utilisation des GUID(uniqueidentifier) qui sont extrêmement contre-performant surtout en tant que PK/FK.
    C'est quand même la manière la plus propre pour résoudre les problèmes de fusion de base en architecture utilisant la réplication de fusion.

    Cela présente aussi un autre avantage ou plutôt élimine un gros inconvénient des IDs autoincrémentés : l'incomplétude d'un objet avant sa persistance, du fait que le GUID peut être affecté par le code créant l'instance, et découpler la question de l'existence d'un objet du problème de sa persistance.

    En bref, je suis en désaccord.


    Je suis d'ailleurs choqué que MS s'en soit servi pour les tables de gestion des aspnet_users, membership etc...
    Moi pas.

  4. #4
    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 : 42
    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
    Points : 3 173
    Points
    3 173
    Par défaut
    qui sont extrêmement contre-performant
    Je parle de problème de performance qui il est vrai est en général le dernier des soucis des développeurs....
    Rassurez moi vous êtes au moins daccord sur ce point...



    C'est quand même la manière la plus propre pour résoudre les problèmes de fusion de base en architecture utilisant la réplication de fusion.
    Pouvez vous citer un exemple de problème rencontré avec les auto-incrément résolu par les GUID qui restent (lui aussi)un identifiant purement technique?

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Je parle de problème de performance qui il est vrai est en général le dernier des soucis des développeurs....
    Rassurez moi vous êtes au moins daccord sur ce point...
    Je suis d'accord sur le fait que cela soit moins performant.

    Par contre avez vous fait des mesures chiffrées pour donner une idée de l'étendue des dégats ?

    Pouvez vous citer un exemple de problème rencontré avec les auto-incrément résolu par les GUID qui restent (lui aussi)un identifiant purement technique?
    Comme mentionné supra : fusion de bases. (et de toute manière un PK n'est en aucun cas censée être un identifiant métier).

  6. #6
    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 : 42
    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
    Points : 3 173
    Points
    3 173
    Par défaut
    Par contre avez vous fait des mesures chiffrées pour donner une idée de l'étendue des dégats ?
    Voici une requête qui ne nécessite aucune mesure supplémentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DATALENGTH(CAST (4 as integer)) as integerLength,
           DATALENGTH(NEWID()) as UniqueIdentifierLength
    Résultat: integerLength: 4: UniqueIdentifierLength 16

    Ratio de 4 pour 1...
    Mettriez vous vos PK en CHAR(16) tout en considérant que cela reste une donnée technique?


    Comme mentionné supra : fusion de bases.
    En clair vous sacrifiez les performances générales de votre base de données (uniqueidentifier propagés dans toute votre base...) uniquement pour simplifier la vie des personnes chargées du développement des lots/batch de fusion...

    et de toute manière un PK n'est en aucun cas censée être un identifiant métier
    Vous voyez qu'on peut être daccord


    Je conçois que cela puisse être pratique... il s'agissait juste d'une préconisation pour notre ami, qui, j'en douterais ne doit pas être sur une réplication de fusion ici.

  7. #7
    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 : 42
    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
    Points : 3 173
    Points
    3 173
    Par défaut
    Je suis d'accord sur le fait que cela soit moins performant.

    Vous savez très bien qu'on est toujours ronchon quand on touche à nos bases chéries

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 23
    Points : 22
    Points
    22
    Par défaut
    En testant avec des "HasValue" ça marche! merci à tous

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

Discussions similaires

  1. personalisation des updates des domaine service
    Par Tardiff Jean-François dans le forum Silverlight
    Réponses: 0
    Dernier message: 10/01/2011, 15h45
  2. Domain Service Class Introuvable
    Par anthride dans le forum Silverlight
    Réponses: 2
    Dernier message: 12/10/2010, 09h52
  3. Problème web Service: class file has wrong version!
    Par mumu27 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 15/08/2010, 11h35
  4. RIA Domain Service: Erreur 504
    Par FranckRav dans le forum Silverlight
    Réponses: 3
    Dernier message: 31/05/2010, 15h49
  5. Application avec plusieurs "Domain Service"
    Par Alexs dans le forum Silverlight
    Réponses: 3
    Dernier message: 30/04/2010, 12h15

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