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

Langages Discussion :

Perte du Dbcontext entre 2 methodes LinQ c# [Débutant]


Sujet :

Langages

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut Perte du Dbcontext entre 2 methodes LinQ c#
    Bonsoir à tous,
    Ma question est peut être idiote mais la voici:

    Peut on rattacher un Dbcontext à un IQueryable<T> quant celui-ci a été perdu lors de l'envoi d'une méthode à une autre ?
    Ou,
    Peut on envoyer en sortie de méthode un Iqueryable ET son DbContext séparément et les rattacher ensuite?
    Ou,
    Existe-il un moyen d'envoyer vers une méthode un Iqueryable sans perdre le Dbcontext ?

    J'ai testé l'ajout du ToList(). ça ne résou pas mon problème car il y'a une perte d'information (le Dbcontext) qui empêche de réutiliser le Iqueryable en le réinjectant dans le même type de méthode.

    Voici le code très simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public IQueryable<DiagTab> Clooper(string m_ValEnvoi)
      {
                string Ladatatable = m_ValEnvoi; // "Nom_de_la-colonne = 1"
     
                using (var db = new DiagEntities()) 
                {
                    var secki = db.DiagTabs.Where(Ladatatable); LinQ Dynamic
     
                    return secki;
               }
    }
    que je récupère ensuite ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TheLoop pilou = new TheLoop();                                       
    pilou.Clooper(Valtest); // renvoi un Iqueruable
     
    var olami = pilou.Clooper(Valtest);
     var selection_click = olami.ToList();
     GridView1.DataSource = selection_click;
    interruption du code avec l'erreur: "Impossible de terminer l'opération car le DbContext a été supprimé"
    merci de votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Salut,

    Deux solutions :
    1) tu executes ton .Tolist dans ta fonction et tu retournes le résultat (donc ta fonction sera typée as List<DiagTab> plutot que IQueryable<DiagTab>)
    2) tu instancies ton contexte dans l'appelant et tu le passes au constructeur de ta classe réalisant la requete (TheLoop si j'ai bien compris)

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    bonsoir merci de prendre le temps de me répondre.

    j'avais testé la 1ere solution qui fonctionne bien mais si la finalité est l'affichage.

    la j'ai besoin de récupérer le Iqueryable sans le dénaturé (sans perte d'info) afin de pouvoir le réinjecter dans plusieurs autres méthode, calquer sur le même type de méthode qui l'a créer (sorte de boucle de méthode).
    La solution 2 me semble tout a fait adapter. En revanche je n'ai pas trop compris tous les termes techniques. Peut tu m'en dire plus sur l'instanciation d'un context. A vrai dire je ne savais même pas que c'était possible :=)

    merci de ton aide

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Un dbcontext est une classe donc tu l'instancies (tu crées une instance de cette classe) au moment du using.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    using (var db = new DiagEntities()) 
                {
                    var secki = db.DiagTabs.Where(Ladatatable); LinQ Dynamic
     
                    return secki;
               }
    Equivaut à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var db = new DiagEntities();
               var secki = db.DiagTabs.Where(Ladatatable); LinQ Dynamic
               return secki;
               db.dispose();
    var db = new DiagEntities() veut dire que tu crées une nouvelle instance de DiagEntities sur laquelle tu vas travailler.
    db.dispose permet de détruire proprement cette instance (cela ferme la connexion à la base de données...)

    Donc forcément, si tu utilises ta requete après avoir détruit le contexte, ça ne fonctionne pas.

    Le mieux à faire est que tu créés un constructeur sur ta classe TheLoop qui attend en paramètre une instance de DiagEntities.
    Dans ce constructeur, tu conserves ton instance dans une variable privée de ta classe.
    Dans ta fonction retournant ton iqueryable, tu utilises cette variable privée en tant que contexte (donc on est bien d'accord, tu ne créés pas de nouvelle instance au sein de cette classe, tu le feras depuis l'exterieur - voir ci dessous).

    Une fois que cette classe est bien codée, à l'endroit où tu l'utilises, tu auras un truc dans ce gout là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    using (var db = new DiagEntities()) 
                {
                TheLoop pilou = new TheLoop(db);                                       
                pilou.Clooper(Valtest); // renvoi un Iqueruable
     
               var olami = pilou.Clooper(Valtest);
               var selection_click = olami.ToList();
               }

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    merci beaucoup !
    c'est claire et net

    Je testerai ça cette nuit en rentrant du boulot

    On devrait jamais copier coller des bouts de code sans comprendre leur nature profonde.
    Avec le code décomposé, effectivement je vois même pas pourquoi j'ai posé cette question. C'est un non sens.
    Pourtant du using (var machin = new truc muche()) j'en ai utilisé un paquet !

    bonne soirée !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    pas de quoi c'est comme ça qu'on progresse aussi !
    un conseil : penses à toujours dispose ton contexte AVANT le return, c'est mieux et c'est aussi plus lisible

  7. #7
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Alors j'y suis presque !
    La méthode 2 fonctionne très bien
    voici le code:
    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
     
    public class TheLaap
        {
            private DiagEntities dt;
            public TheLaap(DiagEntities rere)//Le constructeur
            {
                this.dt = rere;                       
            }
     
            public IQueryable<DiagTab> Clooper(string m_ValEnvoi)
            {
                string Ladatatable = m_ValEnvoi; // place l'argument envoyé dans une variable            
                var secki = dt.DiagTabs.Where(Ladatatable);     // ici la variable est un string du type "A = 1" avec A-> nom de colonne et 1 --> valeur recherché dans la colonne
                                                                                  // J'utilise LinQ Dynamic
                //dt.dispose();  je ne l'integre pas parce qu'il ne le reconnait pas et je ne sais pas pourquoi mais ça marche très bien sans donc...
                return secki;                           
            }
    je recupere le résultat de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    using (var dt = new DiagEntities())
                    {
                      TheLaap pilou = new TheLaap(dt); // Appel la classe TheLaap                                        
                            pilou.Clooper(Valtest); // renvoi un 1er Iqueruable
                            var olami = pilou.Clooper(Valtest);
    }
    Le soucis apparaît quant je souhaite réinjecter le Iqueryable dans une fonction de cet type pour faire une sorte de boucle de méthodes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     public IQueryable<DiagTab> Fooster(string m_ValEnvoi, IQueryable<DiagTab> m_table)  // Methode static Snooper avec un argument string
            {
     
                    string EValEnvoi = m_ValEnvoi;
                    var Eolami = m_table;
                    var secki = Eolami.Where(EValEnvoi);
                    return secki;
     
            }
    Je perd a nouveau mon dt context qui n'apparait plus dans le code car "noyer " si je puis dire dans la variable Iqueryable.
    Ce code fonctionne et me le renvoi vers ma methode d'affichage mais bloque comme la derniere fois a l'affichage du gridview avec un joli "dbcontext perdu".
    Je pensais avoir réussi a inclure le contexte dans la variable mais non. Seulement a présent je ne sais pas si on peut "recoller" un context a une variable .

    PS: methode de reception au cas ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    using (var dt = new DiagEntities())
    {
    TheLaap blouarou = new TheLaap(dt); // appel la class TheLaap AVEC le context
                            blouarou.Fooster(Val_Injecter, GoodTable); // renvoi un Iqueruable
                            var Tablenvoi = blouarou.Fooster(Val_Injecter, GoodTable);
                               }

  8. #8
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    mmmmm
    bon visiblement l'erreur, en tous cas la 1ere se trouve plus haut dans le code quant je passe mon iqueryable dans une variable de session. c'est a la sortie que je perd le dbcontext.
    c'est etonnant car je suis dans la même parenthese using var dt= new diagentities

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Salut,

    Ne le prends pas mal mais franchement ton code est imbouffable. Les noms de classes, de variables et autres sont complètement délirants et dénués de sens.
    Pour illustrer mes propos, rien que cette signature et son commentaire piquent les yeux :

    public IQueryable<DiagTab> Fooster(string m_ValEnvoi, IQueryable<DiagTab> m_table) // Methode static Snooper avec un argument string

    Concernant ton problème : tu parles de passer ton IQueryable dans une variable de session => abandonnes l'idée, ça n'a pas de sens non plus
    Pourquoi est-ce que tu t'évertues à vouloir garder ton IQueryable ?!

    Je ne connais pas ton age ni quel est ton rapport avec la programmation en général mais je te conseille de te documenter sur les bases, lire un peu de littérature de base. Je pense que tu passes à coté de plein de choses simples qui te permettraient d'avancer plus vite et mieux
    Rien d'agressif dans mon message surtout hein, c'est vraiment du conseil !

  10. #10
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Non mais pas de soucis
    c'est la vérité. Un gros bordel ce code.

    Pour répondre a tes interrogations : niveau programmation -> Php niveau très moyen (j'avais un petit site sur free comme tous le monde; ASP.net 1mois et demi
    Niveau age: disons plus proche de 60 que de ma naissance donc un boulot a coté et le reste qui va bien, du coup je code plutôt en soirée après le travail (quant tous le monde dort et qu'on me fou la paix ).

    Alors la doc j'en ai lu mais de mon avis (qui reste perso), autant sur du PHP j'avais trouvé plein de chose hyper accessible, pédagogique avec une grosse dose d'empathie pour les novices autant sur ASP.net je trouve ça catastrophique. Très peu d'effort pour contextualiser ou faire du pas à pas. De mon point de vue c'est très orienté pro et je me nourrie presque exclusivement d'exemple ou d'aide de forum (ce qui explique peut être aussi ce code bordelique fait de brique et de broc). Même le site de crosoft je le trouve très peu adapté a l'auto instruction et les rares blog qui parle d'ASP.net recrache les même exemples avec quelques commentaires. Bref tend pis pour moi je ferai avec

    Pour revenir a mon Iqueryable j'ai simplement besoin de partir d'une base de données SQL (via LinQ) , faire une requête pour sélectionner quelques lignes; utiliser ces quelques lignes pour fabriquer une nouvelle "base de données virtuel" et refaire tous le processus à parti de cette nouvelle base.
    Comme la "selection des quelques ligne" a chaque itération, est faite par l'utilisateur je doit utiliser des variables de session (pour stocker le choix) et essayer de créer une boucle avec tous ça.
    Utiliser un Iqueryable qui stock cette base de données virtuel et que je peut repasser dans la moulinette a chaque itération me semblait une bonne idée. Sa va me faire très très mal de faire machine arrière vue le temps passé mais si tu connait une façon de faire je prend

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Eh bien déjà pour commencer, je comprends tout à fait le fait d'être perdu dans les méandres du monde .Net

    Le gros soucis c'est qu'il y a beaucoup de sites de gens se disant prêts à montrer comment faire mais qui ne se rendent pas compte que c'est pire que le mal. Donc forcément, quand on tombe sur ce genre d'exemples, on prend de mauvaises habitudes et c'est là que tout commence. Ce n'est pas grave. Perso, j'ai toujours eu des phases d'apprentissage en dent de scie. Je vais apprendre beaucoup, puis, mal m'orienter, stagner voire redescendre, puis revenir ensuite sur une pente ascendante.

    Je te conseille vivement les bouquins des éditions ENI qui sont très accessibles je trouve (je viens moi aussi à l'origine du monde PHP). Je n'ai pas d'actions chez eux, mais ils ont le mérite de faire des livres qui ne sont pas des pavés hyper techniques, simples à lire et accessibles.

    Il ne faut pas perdre de vue que le monde .Net est super vaste. On va parler d'abord du langage employé (VB.Net ou C#) donc déjà rien que là il y a des livres qui traitent de ces langages, les bonnes pratiques, à quoi servent les using par exemple -> premier point de départ que je conseille (et si possible avec des notions théoriques sur la POO, Programmation Orientée Objet).

    Ensuite, dans le monde .Net, il y a différentes grosses briques : les applications winforms, WPF, les sites ASP.Net, ASP MVC (qui est plus d'actualité aujourd'hui que les sites ASP.Net) et j'en passe encore. A toi de voir vers quoi tu t'orientes. Si c'est pour un site web, l'asp MVC est tout de même plutôt pratique et propre (mais j'avoue que ça peut amener débat), dans tous les cas, c'est plutot dans l'ère du temps. -> même chose ici, un bon bouquin peut être pas mal.

    Sinon, si tu n'as pas peur de l'anglais, il y a ce site : http://www.asp.net/mvc
    Je me suis formé dessus pour apprendre les rudiments d'un site web en asp mvc, c'était plutot bien fait à l'époque.

    Pour en revenir à ta problématique. Il faut savoir que la IQueryable c'est une requête in memory. Donc ce n'est pas une capture de ta table, c'est une image de la requête que l'on peut remanipuler plusieurs fois avant de l'exécuter (bon c'est dans les grandes lignes hein).
    Le mieux, si tu souhaites avoir les données, est de stocker ton résultat quelque part.
    Pour récupérer un résultat, tu fais le ".ToList" au bout de la variable représentant le IQueryable et ce sera tes données récupérées de la BDD.

    De plus, si c'est une question de choix utilisateur, attention de ne pas renvoyer toutes les données alors qu'un simple Id suffirait.
    Si, par exemple, tu présentes un tableau à un utilisateur et qu'il doit cocher des cases puis valider son choix pour effectuer un traitement, coté serveur tu ne dois récupérer QUE l'identifiant des lignes dont la case est cochée. Si tu renvoies les données de la ligne complète, tu te retrouves à uploader des valeurs que tu as déjà en base. Sachant que l'upload est très couteux sur un site web, ce n'est pas une bonne solution.
    Coté serveur, une fois que tu as ces identifiants de lignes, tu fais ce que tu veux avec, quitte à aller les rechercher à nouveau dans la base (ce qui est nettement moins couteux).

    Comme je ne comprend pas du tout ce que doit faire ton site, en tout cas la page en question, je ne peux malheureusement pas aider plus :/

  12. #12
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Merci pour ta réponse.
    Rien que l'explication du ToList m'aide bien et très honnêtement je ne crois pas l'avoir jamais vu écris clairement.
    Pour les livres ça va finir comme ça , je vais aller faire un tour sur Amazon

    En faite l'architecture de la table est, je pense, bancal ou atypique du reste....

    Le but : deviner a quoi tu pense parmi 1000 voitures possible (c'est un exemple).
    moyen : tu va répondre a une suite de question uniquement par oui ou non (elle est bleues?, elle a 4 portes, elle fonctionne a l'essence?).

    La table : Horizontale -> toutes les questions
    Verticale -> tous les modèles de voiture
    Dans chaque case : 1 =vrai et 0 = Faux

    -A parti de la un algo détermine la question la plus pertinente a te poser (celui la il est fait parce que c'est des math et que je gère bien
    -Tu répond par oui ou non.
    -Le programme dégage toutes les voitures qui ne correspondent pas dans la table à ta réponse puis créer une nouvelle table à partir de ça.
    -Sur cette nouvelle table l'algo determine la question la plus pertinente a te poser et te l'affiche.
    - TU répond oui ou non etc etc etc...

    A la fin il te reste une seul ligne ,c'est la voiture a laquelle tu pensais

    Contrainte:
    Beaucoup de ligne et de colonnes (mais avec seulement 1 ou 0 a l’intérieur).
    Je travail sur une petite table de test donc au changement de table (la vrai) je ne veut pas redevoir tous codé j'ai donc fait tous le code en réflexion.

    Et très honnêtement après 1 mois de galère tous fonctionne jusqu'au 3ème clic , c'est le soucis sur lequel tu m'a bien aidé .
    Dans mon esprit très embrouillé je vois la chose suivante, j'ai progressivement migré d'une 1ere question imposé par l'algo sur la table entière a une question presque totalement intégré à une vrai boucle c'est a dire qui rentre un Iqueryable, qui sort un iqueryable (delester de quelques ligne de la table ) que je peut renvoyer tel quel dans le processus de traitement.

    Voila tu sais tous

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Ok je comprends bien maintenant.
    Donc effectivement, il y a bien un problème de conception au départ.
    La vision très "logique" en espèce de table de vérité t'as mis dedans

    Pour le coup, dans l'idéal il aurait fallu trois tables :

    1 table Questions
    1 table ModelesDeVoitures
    1 table de liaison entre les deux

    Cette derniere table n'aurait que deux PK/FK (primary key, foreign key) pour créer une relation 0n-0n entre les véhicules et les questions.
    Pour faire simple : ta table de question et celle de voitures contiennent toutes deux un champ permettant de les identifier (qu'on utilise la plupart du temps avec un type Integer, auto increment, en clé primaire). A chaque fois qu'on ajoute une ligne dans une de ces tables, cet identifiant prend une valeur incrémentée ce qui permet d'identifier de manière unique une ligne de la table.
    Dans la table de liaison ne figurent alors que le lien qui associe une question à un modele de vehicule. Si le lien existe, alors ça équivaut à ton "1". S'il n'y a pas de lien, ça équivaut à 0.

    Exemple :

    Table Voitures
    Identifiant : 1, modele : smart for two
    Identifiant : 2, modele : berline
    Identifiant : 3, modele : minibus
    Identifiant : 4, modele : espace

    Table Questions
    Identifiant : 1, question : possede-t-elle 2 portes ?
    Identifiant : 2, question : possede-t-elle 4 portes ?
    Identifiant : 3, question : possede-t-elle 8 places ?

    Table de liaison :
    Identifiant_Question : 1, Identifiant_Voiture : 1 = on associe la smart for two avec la question "a-t-elle deux portes?"
    Identifiant_Question : 2, Identifiant_Voiture : 2 = on associe la berline avec la question "a-t-elle 4 portes?"
    Identifiant_Question : 2, Identifiant_Voiture : 3 = on associe le minibus avec la question "a-t-elle 4 portes?"
    Identifiant_Question : 2, Identifiant_Voiture : 4 = on associe l'espace avec la question "a-t-elle 4 portes?"
    Identifiant_Question : 3, Identifiant_Voiture : 3 = on associe le minibus avec la question "a-t-elle 8 places?"
    Identifiant_Question : 3, Identifiant_Voiture : 4 = on associe l'espace avec la question "a-t-elle 8 places?"

    Voilà le principe de la BDD en gros.

    Concernant la gestion des questions :
    Je pense que tu devrais gérer les réponses en session. Par exemple, dans la session utilisateur, tu conserves un dictionnary<integer, integer> dans lequel tu stockes en tant que clé l'identifiant de la question à laquelle a répondu l'utilisateur et en valeur, sa réponse.

    A chaque fois que tu retournes coté serveur (donc l'utilisateur a validé une nouvelle réponse), tu ajoutes cette réponse à ce dictionary puis tu l'envoies en tant que paramètre dans ta fonction "moulinette algo".
    Il te suffit alors d'effectuer cette requete linq à partir des éléments du dictionary (tu peux boucler sur chacune des réponses grace à la liste de clés du dictionary disponibles depuis le dictionary lui même).

    Le fait de vouloir préserver quelque part cette fameuse requete pour pouvoir ensuite la refiltrer n'est pour moi pas une bonne solution.
    Ensuite il y a la méthode bourrin (si tu souhaites conserver ta structure) : tu récupères la totalité de la table en mémoire puis, à chaque réponse, tu filtres ta table (tu retires les lignes qui ne sont pas concernées à chaque fois) et tu écrases ta liste par cette nouvelle liste filtrée.
    Niveau données en mémoire ça peut vite devenir gourmand, méfiance.

    Par contre, dernier point : gérer une table sur 2 dimensions variables, ce n'est pas du tout la bonne façon de faire.
    Que le nombre de lignes augmente, c'est tout à fait logique, que le nombre de colonnes (ce que tu indiques comme étant la partie "horizontale") augmente au fur et à mesure que tu ajoutes des modèles de véhicule, ça ne se fait pas du tout. D'une part parce que j'imagine que le nom du champ (nom de la colonne) correspond au modele du véhicule -> c'est mal le nom d'une colonne n'est pas une donnée. C'est quelque chose qui identifie une structure, un champ de table en l'occurence. Je te conseille vraiment la solution citée plus haut avec les 3 tables (donc il faudra ajouter un bouquin sur les bases de données, méthode merise...)

    Voila voila bonne chance et bon courage !

  14. #14
    Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Encore merci de ton aide

    Conceptuellement ton système me plait bien est il est beaucoup plus adapté a ASP. net et a la programmation en général

    J'ai longtemps travaillé sur le logiciel R et j'était parti sur une conception plus "matricielle " .
    Cette façon de faire a le mérite de mettre les choses plus "a plat". Les N dimensions de tableau c'est souvent la foirade, on gère les erreurs a la main jusqu'au moment ou intellectuellement c'est plus possible et la on ferme les yeux et on espère que le code fait le job correctement .

    Je vais repartir la dessus. Tous de suite a chaud je dirais que tu es a la fois mon meilleur ami et la personne que je déteste le plus dans le monde...

    Encore merci et bonne soirée

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Citation Envoyé par pyriame Voir le message
    Je vais repartir la dessus. Tous de suite a chaud je dirais que tu es a la fois mon meilleur ami et la personne que je déteste le plus dans le monde...
    Cela me va droit au coeur, preuve que mon aide a eu son petit effet
    Bon courage et bonne soirée

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2006, 16h24
  2. perte de couleur entre version 1.4.2 et 1.5
    Par Edta dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 15/11/2006, 12h39
  3. Perte de temps entre Deux bases MySQL
    Par ramm50 dans le forum Outils
    Réponses: 7
    Dernier message: 08/09/2005, 09h33
  4. [VB.NET] Perte de focus entre deux form
    Par toniolol dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/07/2005, 08h00
  5. [VB.NET] Perte de session entre 2 projets
    Par TekP@f dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/05/2005, 09h12

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