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

NHibernate Discussion :

[NHibernate] LImiter le nombre de champs dans une requête


Sujet :

NHibernate

  1. #1
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2009
    Messages : 61
    Points : 59
    Points
    59
    Par défaut [NHibernate] LImiter le nombre de champs dans une requête
    Bonjour,

    J'ai une table avec 15 champs que je nomme table "toto"
    J'ai la classe toto.cs qui contient 15 propriétés (représentant les champs de la table...).

    Je souhaite effectuer une requête qui me permette de récupérer 2 champs de la table et de charger les 2 propriétés de l'objet "toto" avec ces 2 champs.

    J'ai commencé à faire comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ProjectionList pl = Projections.ProjectionList();
    pl.Add(Projections.Property("Id"));
    pl.Add(Projections.Property("Email"));
     
    var t = this.Session.CreateCriteria(typeof (toto))
                    .SetProjection(pl)
                    .Add(Restrictions.IdEq(id))
                    .UniqueResult<toto>();
                return t;
    Avec ce code, j'ai une erreur de cast (normal, ce n'est pas toute les propriétés de l'objet qui sont renvoyées).
    Je cherche donc à trouver une méthode qui puisse charger partiellement l'objet tout en gardant son type.

    Merci d'avance pour les pistes.

    Nicolas

  2. #2
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2009
    Messages : 61
    Points : 59
    Points
    59
    Par défaut
    Problème résolu!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     ProjectionList projectionList = Projections.ProjectionList();
    projectionList.Add(Projections.Property("Id"), "Id");
    projectionList.Add(Projections.Property("Email"), "Email");
     
                var p = this.Session.CreateCriteria<toto>()
                                .SetProjection(projectionList)
                        .Add(Restrictions.IdEq(id))
                        .SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean<toto>())
                        .UniqueResult<toto>();
     
                return p;

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Cool, tu m'apprends un truc

  4. #4
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2009
    Messages : 61
    Points : 59
    Points
    59
    Par défaut
    Maintenant le problème vient du mapping
    Si j'ai une relation many to one dans la table toto et que je souhaite récupérer les données, nhibernate il ne veux pas!!

    dans la classe toto, j'ai une IList<titi>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    projectionList.Add(Projections.Property("listTiti"), "list");
    il leve une exception de type "indexOutOfRange".

    J'ai fais des essais, mais rien de concluant...

  5. #5
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2009
    Messages : 61
    Points : 59
    Points
    59
    Par défaut
    Je met le bout de code qui me permet de charger la liste contenu dans la classe toto (IList<titi> listTiti) et je l'affecte à l'objet toto. N'y a t'il pas plus simple pour charger la liste

    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
    25
     
    public Toto GetTotoByIdForInvitationCheck(Guid id)
            {
                toto t = new toto();
     
                IList<titi> list = Session.CreateCriteria<titi>()
                    .CreateAlias("toto","t")
                    .Add(Restrictions.Eq("t.Id", id))
                    .List<titi>();
     
                t = this.Session.CreateCriteria<toto>()
                    .SetProjection(Projections.ProjectionList()
                                       .Add(Projections.Id(), "Id")
                                       .Add(Projections.Property("Email"), "Email"))
                    .Add(Restrictions.Eq("Id", id))
                    .SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean<toto>())
                    .UniqueResult<toto>();
     
                t.SentInvitations = list;
     
     
     
                return t;
     
            }

Discussions similaires

  1. [AC-2003] limitation du nombre de ligne dans une requête
    Par saiffadi dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 04/03/2012, 18h33
  2. [AC-2003] Limitation du nombre de champs dans une requête UNION
    Par guidav dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/03/2011, 13h15
  3. Nombre de champs dans une requête de sélection
    Par 30avril1989 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/06/2010, 01h16
  4. limite du nombre de caractères dans une requete
    Par pheno82 dans le forum Access
    Réponses: 3
    Dernier message: 01/06/2006, 22h12
  5. [C#] Limité le nombre de lignes dans une DataView ...
    Par maitrebn dans le forum Accès aux données
    Réponses: 5
    Dernier message: 07/11/2005, 23h57

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