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 :

Loader un DomainContext avec une query invoquée


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut Loader un DomainContext avec une query invoquée
    Bonjour à tous

    Je me trouve dans une situation (laquelle je ne vais pas détailler, car peut-être inutile) où je voudrais faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _DomainContext.Load(_DomainContext.GetMySqlTableQuery())
    Voici la définition de GetMySqlTableQuery() qui est du code auto-généré à la compilation du client pointant vers le serveur Web.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /// <summary>
    /// Returns an EntityQuery for query operation 'GetMySqlTable'.
    /// </summary>
    public EntityQuery<MySqlTable> GetMySqlTableQuery()
    {
      this.ValidateMethod("GetMySqlTableQuery", null);
      return base.CreateQuery<MySqlTable>("GetMySqlTable", null, false, true);
    }
    Mon problème, c'est que je voudrais loader mon DomainContext avec une table SQL dont je ne connais que le nom, à partir du quel j'en déduis le nom de la méthode que je vais invoquer (car je suis dans une logique de code générique)

    Mon code ci-dessous plante à l'exécution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach (MethodInfo method in _DomainContext.GetType().GetMethods())
    {
      if (method.Name = "toto") // bon, on va dire que j'ai trouvé ma bonne méthode
      {
        EntityQuery<Entity> query = method.Invoke(_DomainContext, null) as EntityQuery<Entity>;
        _DomainContext.Load(query);
      }
    }
    Le plantage se produit sur la ligne de code rouge et renvoit à la ligne de code bleu qui dit :
    ArgumentNullException
    La valeur ne peut pas être null.
    Nom du paramètre : value
    Merci d'avance pour votre aide

  2. #2
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Toujours concernant mon problème, je m'aperçois que l'erreur est due à la ligne en rouge ci-dessous. La variable "query" est NULL... L'invocation renvoit NULL.
    Avez-vous une idée ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach (MethodInfo method in _DomainContext.GetType().GetMethods())
    {
      if (method.Name = "toto") // bon, on va dire que j'ai trouvé ma bonne méthode
      {
        EntityQuery<Entity> query = method.Invoke(_DomainContext, null) as EntityQuery<Entity>;
        _DomainContext.Load(query);
      }
    }
    Merci d'avance.

  3. #3
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    C'est l'Invoke qui renvoit null ou le cast ?
    Si tu mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object query = method.Invoke(_DomainContext, null);
    Ca donne null aussi ?

  4. #4
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    C'est une très bonne remarque que tu fais !
    C'est bien le cast qui renvoit NULL, et non l'Invoke. Je ne savais même pas qu'un cast pouvait renvoyer NULL sans planter...

    Mais alors, je suppose que c'est mon type EntityQuery<Entity> qui est mal choisi. J'ai vraiment regardé côté client, je ne vois pas trop à quelle autre classe je pourrais caster

    Pourriez-vous m'aider ? (me donner la réponse )

    Merci bien !

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ben regarde le type de ton objet retourné avec le debugger.

    C'est bien le cast qui renvoit NULL, et non l'Invoke. Je ne savais même pas qu'un cast pouvait renvoyer NULL sans planter...
    Le cast avec as retourne null s'il ne peut pas caster, alors que le cast avec les parenthèse lance une exception s'il n'y arrive pas.

  6. #6
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Merci pour ton explication sur le cast.

    J'ai fait un autre essai, et j'obtiens ceci :
    - en castant en EntityQuery<MySqlTable>, ça fonctionne
    - en passant en mode générique, donc en castant en EntityQuery<Entity>, ça ne fonctionne pas

    Et pourtant, en allant dans la définition de MySqlTable, j'obtiens (dans le fichier auto-généré côté client) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [DataContract(Namespace="http://schemas.datacontract.org/2004/07/MyProject.Web.Database")]
    public sealed partial class MySqlTable : Entity // System.Windows.Ria.Entity
    {...}
    Donc tout indique que j'ai choisi le bon type pour caster non ?

    Pour info, en débuggant, j'obtiens que l'Invoke renvoit ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Windows.Ria.EntityQuery<MyProject.Web.Database.MySqlTable>
    Voilà où j'en suis, je n'ai plus d'idée

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

Discussions similaires

  1. trouver un record avec une query
    Par Daniela dans le forum SQL
    Réponses: 5
    Dernier message: 28/03/2011, 16h47
  2. probleme avec une query
    Par Daniela dans le forum SQL
    Réponses: 2
    Dernier message: 17/07/2009, 11h51
  3. Pb d'insertion deux fois avec une query d'un dataAdapter
    Par Contact2012 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/09/2008, 14h48
  4. Création d'une base avec Mysql query browser
    Par mohamed2006 dans le forum Outils
    Réponses: 0
    Dernier message: 15/02/2008, 08h56
  5. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48

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