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 :

ToList pour contourner les lacunes de Include


Sujet :

Entity Framework

  1. #1
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut ToList pour contourner les lacunes de Include
    Bonjour,

    dans la classe Acquisition étendant mon modèle Entity, j'ai une fonction rapatriant les historiques des Acquisitions.

    Une des requêtes inclue une relation avec une table de paramètre voisine. Si j'utilise le Include pour travailler avec, la donnée n'est pas chargée et l'exécution renvoie une erreur. Si Je fais un ToList des données, la pas de souci.

    Je savais que sous la 3.5 SP1 Include posait un souci, d'un un usage des ToList, mais je retrouve les mêmes soucis avec la V4...

    KO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    this.HistoriqueAcquisitionEnCours.Include(p => p.ParametreHistorisationVariable);
    res.HistorisationEnCours = this.HistoriqueAcquisitionEnCours.AsParallel()
                                   .Where(ha => codesVariable.Contains(ha.ParametreHistorisationVariable.CodeVariable)).ToList();
    OK :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    this.ParametreHistorisationVariable.ToList();
    res.HistorisationEnCours = this.HistoriqueAcquisitionEnCours.AsParallel()
                                   .Where(ha => codesVariable.Contains(ha.ParametreHistorisationVariable.CodeVariable)).ToList();
    Projet initialement 3.5 SP1, migré en 4, compilé sous .net 4 avec VS 2010.

    Merci

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Tu montres trop peu de code (ni l'erreur) donc c'est pas évidant de diagnostiquer.

    A priori le problème ne vient pas des includes. Je pense que tu n'as pas encore bien compris le fonctionnement d'entity framework et de AsParallel()

    Entity framework génère du SQL a partir d'une requête linq et une requête sql est fait pour être envoyé vers une base de données exécuté ce qui retourne des résultats.

    AsParallel permet du traitement parallèle multi threadé ce qui n'est pas compatible avec le fait de créer et d'envoyer une requête SQL à un serveur, de plus je ne vois pas bien l'intérêt d'un AsParallel().

    Si cela fonction dans ton cas quand tu fait un ToList c'est que tu ramènes l'intégralité de la table en mémoire et que tu la traite après de façon "parallèle", ce n'est pas du tout bon d'un point de vue performances.

    Il faut faire bien attention à AsParallel() qui n'est pas aussi anodin qu'il parait et bien avoir conscience de ce qu'il se passe derrière

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut
    Exception, c'est vrai que je ne l'ai pas indiqué clairement :
    Object reference not set to an instance of an object.
    Et effectivement, si je ne mets pas AsParallel(), ça passe sans souci... Le traitement parallèle à EF n'est donc pas indiqué ? Je comptais utiliser le AsParallel pour justement optimiser la vitesse de chargement des données (pouvant potentiellement charger plusieurs milliers de lignes, chacune contenant un varbinary...)

    Donc EF+Parallel est à oublier ? Dommage ça semblait alléchant...

    Merci pour tes précieuses remarques en tout cas

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    AsParallel peut etre appliqué sur les données provenant de la base de données une fois qu'elles sont récupérées dans l'application .Net donc seulement à partir du ToList()

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut
    Ok merci pour les infos

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

Discussions similaires

  1. Réponses: 38
    Dernier message: 09/10/2015, 09h22
  2. Microsoft publie des extensions pour combler les lacunes de JavaScript
    Par Hinault Romaric dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/11/2011, 13h58
  3. Réponses: 2
    Dernier message: 26/07/2011, 16h25
  4. pour que les < se comportent comme des " (include)
    Par hpavavar dans le forum Visual C++
    Réponses: 4
    Dernier message: 07/05/2007, 09h46

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