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 :

Conseil programmation - Accès aux données avec EF


Sujet :

Entity Framework

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Points : 67
    Points
    67
    Par défaut Conseil programmation - Accès aux données avec EF
    Bonjour à tous,

    Je suis en train de faire la couche d'accès aux données d'une application client lourd. Cette couche sera, plus tard, utilisée pour une application Web. Mon collègue (qui est actuellement en vacances) m'a dit que pour le Web, la connexion à la BDD doit tout le temps être fermée. Donc pour tout accès à la BDD on ouvre une connexion, on fait sa requête et on referme.
    Moi, je dois récupérer une foule d'informations dans la BDD (donc plusieurs requêtes de selection) pour construire un Objet.
    Ma question est donc la suivante : Est-ce qu'il vaut mieux ouvrir et fermer la connexion à chaque requete de sélection? ou bien j'ouvre, je récupère tout ce que j'ai à récupérer, puis je ferme? Qu'est-ce qui influence votre choix?
    Autre question : Est-ce que cette façon de faire est bonne :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using(Context Entity)
    {
        Récupération des données via le Context
    }

    Enfin, si quelqu'un a des exemples de code je suis preneuse.

    Merci

  2. #2
    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
    A priori, c'est EntityFramework qui se chargera de cela pour toi, tu ne devrais pas à avoir à t'en préoccuper.

    Pour répondre à la question malgré tout, le plus logique serait d'ouvrir une connexion, de faire tes requêtes, puis de fermer la connexion.

    Et oui, cette méthode est la bonne, et pour les exemples je te conseille de lire le billet de la MSDN. Si tu utilises EF 4.0, tu peux jeter un oeil dans "Past Versions" et voir les vidéos de Julia Lerman, mais elles sont en anglais.
    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 --

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Je tiens à dire quelque chose! Ouvrir et fermer une connection est très couteux. Ceci dit, c'est pas pour autant qu'il faut avoir qu'une connection partagé par tous le monde et qui dure indéfiniment. Il est généralement d'usage dans une application web d'avoir une connection par requête utilisateur (un GET sur une page). Pour un client lourd, c'est une connection par fenêtre. Après, ca se nuance par projet.
    Après pourquoi ton collègue n'a pas des perfs dégueulasse, c'est que justement, les fournisseurs de composants d'accès aux données ont créé le concept de Connection Pool. Grosso modo, même si tu fermes une connection dans ton code, elle n'est pas effectivement fermée et peut être réutilisée si une autre requête SQL en a besoin. Ca permet d'économiser du temps.
    Tu peux t'amuser à désactiver le Connection Pool et tu veras une nette dégradation des performances entre ouvrir une connection globale et ouvrir pour chaque requête.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Points : 67
    Points
    67
    Par défaut
    Merci à vous pour vos conseils.
    Je vais donc récupérer toutes mes données avec la même conexion.
    Merci aussi pour le lien avec les video. Je vais me débrouiller même si c'est en anglais, il faut vraiment que je me documente sur EF ...

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

Discussions similaires

  1. L'accès aux données avec Qt
    Par Alain Defrance dans le forum Bases de données
    Réponses: 7
    Dernier message: 18/09/2009, 15h56
  2. L'accès aux données avec Qt
    Par Alain Defrance dans le forum Qt
    Réponses: 7
    Dernier message: 18/09/2009, 15h56
  3. vitesse d'accès aux données avec une jointure
    Par Invité dans le forum SQLite
    Réponses: 1
    Dernier message: 01/07/2009, 00h46
  4. Gérer l'accès aux données avec un Bindingsource
    Par soso78 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/04/2009, 23h23
  5. [AJAX] Acces aux données avec ajax dans une fonction javascript
    Par Sidi-Bou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/03/2008, 12h04

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