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

Silverlight Discussion :

Problème de projection avec RIA Services


Sujet :

Silverlight

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 69
    Points : 40
    Points
    40
    Par défaut Problème de projection avec RIA Services
    Bonjour tout le monde,

    J'utilise Silverlight 4 + Patern MVVM + Entity Framwork + RIA Services.

    Tout marche parfaitement bien, je renseigne bien mon contexte de domaine avec mes données de la base, puis lié à une datagrid.

    Sauf que maintenant je souhaite uniquement sélectionner 2 champs lors du remplissage de mon contexte de domaine et ne pas avoir tout les champs affiché dans la datagrid. Du coup je suis partie sur cette requete linq (executer sur le load du DomainContext) :

    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
    private void Load(string recherche)
            {
                domainContext.Personnels.Clear();
                this.Personnels = domainContext.Personnels;
     
                requete = from c in domainContext.GetPersonnelQuery()
                          where c.Nom.Contains(recherche)
                          select new Personnel  { ID=c.ID, Nom=c.Nom, Prenom=c.Prenom}; 
    ;
     
     
                LoadContext();
            }
     
            private void LoadContext()
            {
                IsBusy = true;
                LoadOperation<Personnel> loadOperation = domainContext.Load(requete);
                loadOperation.Completed += delegate
                {
                    if (loadOperation.HasError)
                        MessageBox.Show(loadOperation.Error.Message);
                    IsBusy = false;
                };
            }

    Sur domainContext.Load(requete); j'ai l'erreur
    Select projections are not supported.
    J'ai beau tourner tout celà dans tout les sens mais je n'ai pas de solution.

    Merci pour votre aide.

    Nicolas.

  2. #2
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Hello,

    Le pb ici c'est que tu essayes de requeter RIA avec ta projection ce qui n'est pas supporté. Ce que tu peux faire par contre c'est ça :
    1. Charger ton domainContext avec la query sans la projection
    2. Dans le callback de ton Load tu effectue la projection sur les objets remontés (dans la propriété entities)
    3. Tu exposes ta collection d'objet projeté dans ton viewModel
    4. tu bind la datagrid sur cette collection


    Par contre tu ne pourras pas charger de projections dans ton context puisqu'il ne connait pas les objets projetés.


    Edit : tu as aussi la solution de chargé le contexte et de spécifier les colonnes à afficher au datagrid (en mettant autogeneratecolumn à false)

    Bon courage,

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 69
    Points : 40
    Points
    40
    Par défaut
    OK j'ai bien compris ta solution. Merci encore.

    Par contre cela veut dire, avec la techno choisi que je suis obligé de faire une requete systématiquement sur tout les champs même si j'ai uniquement besoin de certain d'entre eux.

    C'est pas super optimisable donc...où je conclus trop vite?

    Merci encore dans tout les cas.

  4. #4
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Hello,

    Par défaut, cela fait ce que tu as besoin dans la majorité des cas, c'est à dire te remonter toutes les propriété de l'objet.

    Si après tu as des contraintes d'optimisation du volume de données échangées très forte tu peux toujours fabriquer des objets POCO pour ne remonter que ce que tu as besoin. C'est très bien expliqué ici : http://stackoverflow.com/questions/2...653971#2653971

    ++

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 69
    Points : 40
    Points
    40
    Par défaut
    Super merci en effet ca colle.

    Encore une petite précision si tu veux bien. Avec l'utilisation de MVVM j'ai crée une DelegateCommand pour que lors d'un click sur un bouton un load des infos se fasse et que la datagrid soit renseigné.

    Si je vais déporter ce chargement dans le load de la page xaml comment dois-je procéder?

    Merci.

    Nicolas.

  6. #6
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Hello,

    Et bien tu copie/colle le code :-) !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 69
    Points : 40
    Points
    40
    Par défaut
    Heu LOL ok.

    Mais la subtilité tiens dans le fait que le chargement de ma datagrid est fait par l intermédiaire d' une command pour respecter l architecture mvvm. D' ou mon problème, car on lie une command facilement a un bouton mais comment lié ce traitement a un load d une page pour avoir le chargement de ma grid a ce moment???

  8. #8
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Hello,

    Tu as deux solutions qui me viennent à l'esprit :
    1. La plus simple : tu le fais directement dans le constructeur de ton ViewModel !
    2. Tu attaches un behavior qui appelle ta commande lors de l'événement Loaded de ta vue


    Voila !

Discussions similaires

  1. Probléme avec commande service
    Par rach20032 dans le forum Réseau
    Réponses: 10
    Dernier message: 11/07/2007, 13h03
  2. Réponses: 5
    Dernier message: 04/07/2006, 00h11
  3. Problèmes avec les services NT/Windows 2000
    Par newfsch dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 02/03/2006, 16h49
  4. [C#][service windows] problème de débutant avec 1 timer
    Par Nycos62 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/10/2005, 11h22
  5. Problème avec mon service mysql et PhpMyAdmin
    Par Fixazo dans le forum Outils
    Réponses: 1
    Dernier message: 28/08/2005, 18h02

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