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

Entity Framework Discussion :

[MVC 3] [razor]db.table.** [Débutant(e)]


Sujet :

Entity Framework

  1. #1
    Membre régulier
    Homme Profil pro
    .Net developer
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net developer

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Points : 91
    Points
    91
    Par défaut [MVC 3] [razor]db.table.**
    Bonjour,

    Cela fait 1 mois que je me suis lancé dans le développement .NET, et je galère...

    En gros, j'ai du mal à me servir de l'entity framework. Pourtant, la doc existe, mais reste très vague. Connaissez-vous un cours dans lequel je pourrais apprendre par quoi remplacer les "**" de mon titre?

    Aussi, sur le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ViewBag.typeCompte = New SelectList(db.client.Distinct, "typeCompte", "typeCompte")
    typeCompte ne peut être que "client" ou "prospect". J'aimerais donc récupérer une liste avec 2 éléments. Là, pour le moment, même avec le "Distinct", il me donne autant d'éléments qu'il n'y a de comptes dans la DB. Que dois-je faire pour fixer ça?

  2. #2
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Salut

    Citation Envoyé par patxy Voir le message
    Bonjour,

    Cela fait 1 mois que je me suis lancé dans le développement .NET, et je galère...

    En gros, j'ai du mal à me servir de l'entity framework. Pourtant, la doc existe, mais reste très vague. Connaissez-vous un cours dans lequel je pourrais apprendre par quoi remplacer les "**" de mon titre?
    Je comprends pas trop ta question, je ne vois pas de quoi tu parles quand tu parles des "**".

    En cours assez simple permettant de comprendre les bases il y a :
    http://www.asp.net/mvc/tutorials/get...-mvc3-part1-cs

    http://www.asp.net/mvc/tutorials/get...vc-application

    Citation Envoyé par patxy Voir le message
    Aussi, sur le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ViewBag.typeCompte = New SelectList(db.client.Distinct, "typeCompte", "typeCompte")
    typeCompte ne peut être que "client" ou "prospect". J'aimerais donc récupérer une liste avec 2 éléments. Là, pour le moment, même avec le "Distinct", il me donne autant d'éléments qu'il n'y a de comptes dans la DB. Que dois-je faire pour fixer ça?
    Si tu regardes le descriptif de la méthode SelectList que tu utilises, tu remarqueras que les arguments que tu passes sont incorrects.
    Le premier paramètres est la liste des items que tu veux afficher et les autres parametres le "displaymember" et le "valuemember".
    Dans ton code, tu passes la liste des clients et tu veux afficher son type de compte et tu veux "récupérer" le type de compte...

    Il faut plutot que tu récupère la liste et que tu la passes en paramètre.
    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var listTypeCompte = db.client.typeCompte.ToList();
    ViewBag.typeCompte = New SelectList(listTypeCompte , "id", "libelle")

  3. #3
    Membre régulier
    Homme Profil pro
    .Net developer
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net developer

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Points : 91
    Points
    91
    Par défaut
    Tout d'abord, merci pour l'intérêt que tu me portes.

    Concernant la question "générale" de recherche de docs. En fait, je n'arrive pas trop à trouver quelque chose de complet sur les listes que j'ai besoin d'afficher. J'arrive pas à paramétrer mes requêtes.


    Pour la question plus précise sur le code, dans la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ViewBag.typeCompte = New SelectList(listTypeCompte , "id", "libelle")
    A quoi correspond le libellé?
    Je dois en fait afficher tout ce qu'il y a dans db.client.typeCompte


    edit : petit souci avec la première partie du code. (je suis en VB en fait).
    donc, lorsque je veux lancer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim listTypeCompte = db.client.typeCompte
    Je reçois comme erreur :
    'typeCompte n'est pas un membre de 'System.Data.Objects.ObjectSet(Of MVCApplication4.client).
    D'ailleurs aucune autre des colonnes de la DB n'est membre.

    Pas très grave. Si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                Dim listTypeCompte = db.client.Distinct.ToList()
                ViewBag.typeCompte = New SelectList(listTypeCompte, "idClient", "typeCompte")
    Je récupère toujours la même chose. Une liste avec plein de fois Client, et plein de fois Prospect.
    A mon avis, c'est le distinct que je ne positionne pas bien. Meilleure idée que moi?

  4. #4
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    J'ai supposé que TypeDeCompte est une classe objet avec Id et Libelle.
    Maintenant si ce n'est pas une classe et uniquement des strings, tu peux utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ViewBag.typeCompte = New SelectList(listTypeCompte)

  5. #5
    Membre régulier
    Homme Profil pro
    .Net developer
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net developer

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Points : 91
    Points
    91
    Par défaut
    Excuse moi, j'ai édité ma réponse pendant ta réponse.

    Ok, tout cela fonctionne. Mais je me retrouve toujours avec une liste qui ressemble à ça :
    Client
    Client
    Prospect
    Client
    Prospect
    Client
    Client...


    Or, je voudrais :
    Client
    Prospect


    Et je n'arrive pas à placer mon "distinct" (qui est je suppose le paramètre à placer, mais correctement).
    Si je comprends bien, là, il me renvoie tous les types de comptes qui existent chaque fois qu'il y a un client distinct (or, ils le sont tous). J'aimerais qu'il fasse le test pour ne pas qu'il n'y ait pas autant de résultats retournés

  6. #6
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Effectivement ca ne fonctionne pas puisque tu ne listes pas les bonnes choses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim listTypeCompte = db.client.Distinct.ToList()
    ViewBag.typeCompte = New SelectList(listTypeCompte, "idClient", "typeCompte")
    Ce code récupère tous les clients différents et les met dans une liste.
    Tu n'as pas une liste de type de compte mais de clients et tu affiches le typeCompte de chaque client.

    Il faut que tu récupères tous les types au lieu des clients.

    Je reçois comme erreur : 'typeCompte n'est pas un membre de 'System.Data.Objects.ObjectSet(Of MVCApplication4.client). D'ailleurs aucune autre des colonnes de la DB n'est membre.
    Effectivement j'ai fait ça vite fait et j'ai pas fait gaffe à la syntaxe qui est totalement fausse.

    Ton code doit ressembler à quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var listTypeCompte = (from c in db.client select c.TypeCompte).Distinct().ToList();

  7. #7
    Membre régulier
    Homme Profil pro
    .Net developer
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net developer

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Points : 91
    Points
    91
    Par défaut
    Reste un petit souci avec ta requête...

    Plus tard, j'ai besoin d'un idClient. Pourquoi? Je n'en sais rien...

    Si j'exécute ton code tel que, j'obtiens une erreur qui me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DataBinding: 'System.String' does not contain a property with the name 'idClient'.
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
     
    Exception Details: System.Web.HttpException: DataBinding: 'System.String' does not contain a property with the name 'idClient'.
     
    Source Error:
     
    Line 74:             </div>
    Line 75:             <div class="editor-field">
    Line 76:                 @Html.DropDownList("typeCompte", "Client")
    Line 77:                 @Html.ValidationMessageFor(Function(model) model.typeCompte)
    Line 78:             </div></div>

    Donc, j'ai tenté d'adapter ta requête et j'ai tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                Dim listTypeCompte = (From c In db.client Select c.idClient, c.typeCompte).Distinct().ToList()
                ViewBag.typeCompte = New SelectList(listTypeCompte, "idClient", "typeCompte")
    Retour case départ. Le Distinct() fonctionne en regardant l'idClient aussi.

  8. #8
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Citation Envoyé par patxy Voir le message
    Reste un petit souci avec ta requête...
    Plus tard, j'ai besoin d'un idClient. Pourquoi? Je n'en sais rien...
    Si j'exécute ton code tel que, j'obtiens une erreur qui me dit :
    Ne prends pas mon code tel quel et le copier dans ton appli.
    Je ne connais pas ton contexte, quels sont tes classes, le code dans son ensemble, je te donne juste des pistes de recherche et après c'est à toi de chercher et de coder ça correctement.

    Je t'ai donné le lien du fonctionnement de SelectList
    Regarde les exemple et cherche à comprendre comment ça fonctionne.
    Ici si tu as une liste de string uniquement, tu n'as pas besoin de préciser le value et le textField.




    Citation Envoyé par patxy Voir le message
    Donc, j'ai tenté d'adapter ta requête et j'ai tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                Dim listTypeCompte = (From c In db.client Select c.idClient, c.typeCompte).Distinct().ToList()
                ViewBag.typeCompte = New SelectList(listTypeCompte, "idClient", "typeCompte")
    Retour case départ. Le Distinct() fonctionne en regardant l'idClient aussi.
    Evidemment tu selectionnes les couples (idClients,TypeCompte), idClients qui sont tous distincts.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim listTypeCompte = (From c In db.client Select c.typeCompte).Distinct().ToList()
                ViewBag.typeCompte = New SelectList(listTypeCompte)

  9. #9
    Membre régulier
    Homme Profil pro
    .Net developer
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net developer

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Points : 91
    Points
    91
    Par défaut
    En effet, maintenant ça fonctionne mieux.

    Citation Envoyé par bizet Voir le message
    Ne prends pas mon code tel quel et le copier dans ton appli.
    Je ne connais pas ton contexte, quels sont tes classes, le code dans son ensemble, je te donne juste des pistes de recherche et après c'est à toi de chercher et de coder ça correctement.
    C'est justement cela mon problème, c'est que je ne comprends pas bien tout ce que je fais. Désolé, dans ce cas-ci, j'étais persuadé que l'erreur venait de la requête en elle-même et n'ai pas cherché beaucoup plus loin que le bout de mon nez. J'aurais du trouver cette erreur de moi-même.


    Des problèmes de ce type, j'en ai pas mal... Et je cherche surtout un cours/tuto, qui m'expliquerait comment tu as fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    From c In db.client Select c.typeCompte).Distinct().ToList()
    Le reste, j'arrive (et encore... c'est toujours la galère ) +/- à m'en sortir...

  10. #10
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Si tu cherches un cours sur Linq, tu peux regarder l'article de Thomas Lebrun, il est très complet.
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  11. #11
    Membre régulier
    Homme Profil pro
    .Net developer
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net developer

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Points : 91
    Points
    91
    Par défaut
    Ok un grand merci pour le cours. Ca semble correspondre à mes besoins.

    Je ne savais pas que c'étaient des requêtes LinQ qui étaient derrière tout ça. Je pensais que c'était quelque chose un peu plus propre à razor, ou à l'entity framework. Je pensais que EF et LinQ étaient 2 choses totalement différentes, et qu'on accédait à nos données de manière totalement différente.

    C'est encore un peu flou dans ma tête. J'espère que j'arriverai à clarifier tout ça rapidement.

    Sur ce, un grand merci à tous.

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

Discussions similaires

  1. utilisation de ckeditor dans asp.net mvc avec razor
    Par thor76160 dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 24/12/2011, 10h34
  2. [Asp.Net MVC 3 Razor] erreur syntax
    Par mitnick2006 dans le forum ASP.NET MVC
    Réponses: 3
    Dernier message: 21/03/2011, 12h49
  3. [MVC] Objet avec deux tables
    Par angelo2007 dans le forum MVC
    Réponses: 1
    Dernier message: 11/01/2008, 08h42

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