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

ASP.NET MVC Discussion :

Problème d'architecture Repository et IEnumerable


Sujet :

ASP.NET MVC

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Par défaut Problème d'architecture Repository et IEnumerable
    Bonjour,

    Je développe actuellement une application en ASP.NET MVC.

    Voici mon architecture :

    - DAL (avec Entity Framework 4)
    - Entities (POCO)
    - Repositories
    - Website

    Dans les méthodes de mon repository j'avais commencé par coder comme ceci :

    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
    18
    19
    20
    21
    22
    23
    24
     
    public class sugRepository : IDisposable
        {
            private PocoEntities _context;
     
            public SugRepository()
            {
            }
     
            public List<sug_suggestion> ReadAll(int _sug_id)
            {
                using (_context = new PocoEntities())
                {
                    return this._context.sug.FirstOrDefault(a => a.sug_id == _sug_id).ToList();
                }
     
            public void Dispose()
            {
                if (_context != null)
                    _context.Dispose();
            }
     
     
    }

    Puis je réalisais des appels dans les controllers de mon website comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            public ActionResult Suggestion()
            {
                using(var sugRepo = new sugRepository())
                {
                    var suggestion = sugRepo.ReadAll();
                    return PartialView("ManagementSuggestion", suggestion);
                }
            }
    Tout marchait parfaitement jusqu'à aujourd'hui ou j'ai voulu utiliser le composant WebGrid. Se pose alors le problème du chargement dynamique des données. Je souhaite que lors du chargement de la page seules les données de la première page de la grid soient chargées.

    Apparemment ce n'est donc pas une List ou IList qu'il faut utiliser mais plutôt un IEnumerable (directement au niveau du Repository). Dites moi si je me trompe...

    J'ai donc transformé mon Repository de telle manière:

    public IEnumerable<sug_suggestion> ReadAll()
    {
    _context = new PocoEntities();
    return this._context.sug;
    }
    J'ai donc du virer également tous les using car la connexion se fermait avant même que le grid charge les données.

    Donc actuellement cela marche, mais du coup je ne sais plus quand sont dés alloué l'instance de mon context et de mon repository.

    Pour être sur de partir sur une bonne architecture je me permet de poster un message ici. En vous remerciant par avance pour votre aide.

    Bonne journée.

  2. #2
    CUCARACHA
    Invité(e)
    Par défaut
    Salut,

    Avant tout, je dirais que ton repo m'inquiète un peu. Si tu dois accéder à plusieurs tables, tu va ouvrir autant de connexions que de tables et ça va être une catastrophe pour les perfs.

    Personnellement, j'instancie une seule fois le dataContext dans le contrôleur, et je l'utilise dans un using qui se trouve dans le contrôleur.

    Ensuite, tu peux utiliser des méthodes statiques auxquelles tu passes le dataContext en paramètre (dans mon exemple, je te mets une méthode d'extension).

    Pour revenir à ton problème, il faut que tu limites le nombre d'enregistrements dans ta requête Linq en utilisant Skip et Take.

    Skip est le nombre d'enregistrements que tu sautes et take, celui que tu vas renvoyer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    public static class sugRepository
        {
     
            public static IEnumerable ReadPage(this int _sug_id,PocoEntities _dataContext, int toSkip, int toTake)
            {
                    return _dataContext.sug.Where(a => a.sug_id == _sug_id).Skip(skip).Take(take).AsEnumerable();
                }
    Appel depuis ton contrôleur pour la première page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    using(PocoEntities _dataContext = new PocoEntities()){
          int pageSize = 20;
          int sugId = 4;
          IEnumerable Suggestions = sugId.ReadPage(_dataContext, 0, pageSize);
    }
    Pour les autres pages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    using(PocoEntities _dataContext = new PocoEntities()){
          int pageSize = 20;
          int pageNumber = 4;
          int sugId = 4;
          IEnumerable Suggestions = sugId.ReadPage(_dataContext, pageNumber, pageSize);
    }
    Ce qui m'étonne dans ton code c'est que tu utilises un FirstOrDefault qui retourne un objet et non une collection.

    Merci de me dire si ça fonctionne,

    ++

    Laurent Jordi

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut
    Je pense qu'un repository de T aurait été plus élégant mais j'ai essayé de rester dans l'esprit de ton code...

Discussions similaires

  1. Réponses: 10
    Dernier message: 12/03/2009, 23h42
  2. [JPA,Tomcat] Problème d'architecture
    Par Eric73 dans le forum JPA
    Réponses: 4
    Dernier message: 15/04/2008, 18h56
  3. [EJB3 Entity] problème d'architecture et de gestion de persistance
    Par Hug0_76 dans le forum Java EE
    Réponses: 5
    Dernier message: 06/12/2007, 23h03
  4. [MFC] Problème d'architecture
    Par barthelv dans le forum MFC
    Réponses: 1
    Dernier message: 25/05/2007, 10h20
  5. [N-Tier] Problème conception architecture 3-tiers
    Par Royd938 dans le forum Autres
    Réponses: 3
    Dernier message: 17/06/2005, 11h47

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