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 :

Passer un EntitySet<> dans une méthode


Sujet :

Silverlight

  1. #1
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut Passer un EntitySet<> dans une méthode
    Bonjour à tous

    S'il s'agit plus d'une question C# que SL, je m'en excuse.
    Mon but est de créer une méthode qui reçoit une datasource en paramètre, et qui remplit une DataGrid avec. La datasource est une collection EntitySet<> d'enregistrements d'une table SQL, et je veux que la méthode soit générique quant à la table SQL en question passée en paramètre.

    Seulement je n'arrive pas à passer cette datasource, ou la faire reconnaître par ma DataGrid (je suis très mauvais en Generics...).

    Voici où j'en suis, après de multiples essais (de cast et autres) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // calls method
    MyDomainContext myContext = new MyDomainContext();
    MyMethod(myContext.my_sql_entitySet)
     
    // method implementation
    private void MyMethod(System.Windows.Ria.EntitySet<Entity> source)
    {
      MyDataGrid.ItemsSource = source;
    }

    Error:
    'System.Windows.Ria.Entity' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'TEntity' in the generic type or method 'System.Windows.Ria.EntitySet<TEntity>'
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    L'erreur indique qu'il faut fournir un type instanciable par l'EntitySet.

    Est-il possible de ne pas spécifier de type generics :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void MyMethod(System.Windows.Ria.EntitySet source)
    ?

    Ou sinon de passer par object :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void MyMethod(System.Windows.Ria.EntitySet<object> source)
    ?

  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
    Et pourquoi tu mets pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void MyMethod<T>(System.Windows.Ria.EntitySet<T> source)
       where T : new()
    {
     
    }
    Ensuite tu appelles ça comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyMethod<MonEntite>(monSet);

  4. #4
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Merci à vous. La méthode toute bête de seriousme fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void MyMethod(System.Windows.Ria.EntitySet source)
    EntitySet est déjà une collection, c'est marqué dans son nom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void MyMethod<T>(System.Windows.Ria.EntitySet<T> source)
       where T : new()
    {
     
    }
     
    MyMethod<MonEntite>(monSet);
    C'est joli ça, mais je suis mauvais en generics, je ne comprends même pas la syntaxe. Je vais me documenter !!

    Merci bien, c'est résolu

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    je ne comprends même pas la syntaxe
    C'est une contrainte qui indique que ta fonction n'accepte comme type generic T que les types possédant un constructeur sans paramètres, qui sont en particulier pratiques à instancier par reflection.
    Ca garantie au compilo que tu ne pourras pas passer n'importe quoi en paramètre de la fonction, ici "n'importe quoi" étant tout type non instanciable par l'EntitySet.

  6. #6
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Intéressant !
    Le top du top, ça serait d'avoir un type qui caractérise toutes les classes (ou tables SQL) d'un domain service qu'on choisit, à la place du <T>.
    Mais ça j'ai pas trouvé, d'autant plus qu'il ne faut (on ne peut) pas trop toucher les classes autogénérées par EF.
    Merci bien en tout cas !

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

Discussions similaires

  1. Passer une liste d'objets dans une méthode ajax
    Par AsPrO dans le forum ASP.NET Ajax
    Réponses: 4
    Dernier message: 01/03/2012, 11h28
  2. Réponses: 3
    Dernier message: 05/11/2009, 10h28
  3. Réponses: 1
    Dernier message: 10/02/2007, 20h30
  4. passer la valeur d'un return dans une méthode
    Par belukrin dans le forum Langage
    Réponses: 1
    Dernier message: 25/03/2006, 06h58
  5. Réponses: 2
    Dernier message: 15/11/2004, 15h12

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