none
Comment appeler les entités via WCF data service RRS feed

  • Question

  • Bonjour,

    je travaille avec Silverlight et je dois développer la couche d'accès à la BD, pour cela j'ai opté pour Entity Framework et Wcf Data Service.

    en faisant référence au wcf dataservice j'arrive à voir mes tables et exécuter des requêtes linq. Par contre, je n'arrive pas à voir les entités issues du mapping (class générées dans le edmx) ! y'a t-il moyen de les appeler ? surtout que je veux ajouter de nouvelles fonctions à ces entités et les appeler à partir de mon appli silverlight.

    mercredi 20 juillet 2011 14:06

Réponses

Toutes les réponses

  • je reviens sur mon souci, dans le wcf Data service j'ai ajouté la ligne:

    config.SetServiceOperationAccessRule(

    "*", ServiceOperationRights.All);

    et j'ai actualisé le référence web.

    maintenant j'arrive à voir mes entités. mais j'ai un autre souci, j'arrive à voir juste les champs/propriétés crées initialement et non pas celles que j'ai ajouté.

    est ce normal ? 

    mercredi 20 juillet 2011 15:32
  • Bonjour SafWork,

    Oui cela est normal, car le proxy doit être mis à jour. Dans le projet client, à l'endroit où se trouve la référence de service ajoutée au projet, il faut faire un click droit et selectionner la mise à jour du proxy.

    Voila, c'est tout ;)


    Jérémy Jeanson MVP, MCP, MCTS http://blogs.codes-sources.com/JeremyJeanson/ (French or English spoken)
    vendredi 22 juillet 2011 08:15
    Modérateur
  • Merci Jérémy pour ta réponse, mon souci était plutot comment consommer les nouvelles fonctions que j'ai ajouté à ma class partial Usager générée dans le edmx.

    Voila la fonction qui marche :

    public void GetUsagers(System.Windows.Controls.DataGrid dt)
        {
    
          DataServiceQuery<Usager> userQuery = (DataServiceQuery<Usager>)proxy.CreateQuery<Usager>("GetListUsager");
          
          try
          {
            userQuery.BeginExecute(
            (result) =>
              { 
                 var userlist = new DataServiceCollection<Usager>(userQuery.EndExecute(result));
                 dt.ItemsSource = userlist.ToList();
              }, null);
          }
          catch (DataServiceQueryException ex)
          {
            throw ex;
          }
          
        }
    


    Usager est ma class partial

    GetListUsager est la nouvelle fonction que j'ai ajouté : elle renvoie une collection de type Usager

    le problème maintenant si je fais le même appel pour une fonction qui renvoie cette fois ci une collection de type string, je reçois une exception:

    Voici ma fonction :

    public void GetCivilites(System.Windows.Controls.ComboBox cmbCivilite)
        {
          
          DataServiceQuery<String> userQuery = (DataServiceQuery<String>)proxy.CreateQuery<String>("GetCivilite");
          
          try
          {
            userQuery.BeginExecute(
             (result) =>
             {
               var userlist = new DataServiceCollection<string>(userQuery.EndExecute(result));
               
               cmbCivilite.ItemsSource = userlist.ToList(); 
               
             }, null);
    
            
          }
          catch (DataServiceQueryException ex)
          {
            throw ex;
          }
        }
    

    à l'exécution, il pointe sur la ligne

    var userlist = new DataServiceCollection<string>(userQuery.EndExecute(result));

    avec l'exception:

    L'exception System.InvalidOperationException n'a pas été gérée par le code utilisateur
      Message=Erreur lors du traitement du flux de réponse. L'élément XML contient un contenu mixte.
      StackTrace:

    je suis perdue, l'erreur n'est pas significative pour moi !

    Pourriez vous m'aider !!!!

    vendredi 22 juillet 2011 10:06