Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données > NHibernate
NHibernate Forum d'entraide sur l'utilisation du mappeur objet/relationnel NHibernate.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/04/2011, 14h16   #1
goute
Membre régulier
 
Avatar de goute
 
Homme Sylvain
Développeur éclectique
Inscription : novembre 2008
Messages : 187
Détails du profil
Informations personnelles :
Nom : Homme Sylvain
Âge : 34
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Développeur éclectique
Secteur : Finance

Informations forums :
Inscription : novembre 2008
Messages : 187
Points : 99
Points : 99
Par défaut [NHibernate] Criteria et récupération d'une liste d'objets

Bonjour,

En ce moment je suis en train d'essayer de récupérer seulement certains champs particuliers d'une classe/table.
Pour se faire j'utilise Criteria avec les projections.

Voici le mapping de la classe/table dont je veux récupérer certaines données :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
 
  <class name="Business.Model.Origination.OrigineElement, Business.Production" table="SystemTableOrigination.TElementOrigine"  >
    <cache usage="read-write" />
    <id name="Id" column="Id" type="System.Int32" unsaved-value="0">
      <generator class="native"/>
    </id>
    <property name="Number" column="Numero" not-null="true" type="System.String"/>
    <property name="Description" column="Description" not-null="false" type="System.String"/>
    <property name="Observation" column="Observation" not-null="false" type="System.String"/>
    <property name="Poids" column="Poids" type="System.String" not-null="false"/>
    <property name="Dvd" column="CDDVD" type="System.String" not-null="false"/>
 
    <bag name="DonorTaker" lazy="false" inverse="true">
      <key column="ElementOrigineId"/>
      <one-to-many class="Business.Model.DonorTaker.DonorTaker, Business.Production"/>
    </bag>
  </class>
</hibernate-mapping>
Voici la classe :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
    [DataContract]
    public class OrigineElement : Business.Model.Production.Common.EntityBase, IElement
    {
        [DataMember] public virtual string Number { get; set; }
        [DataMember] public virtual string Description { get; set; }
        [DataMember] public virtual string Observation { get; set; }
        [DataMember] public virtual IList<Business.Model.DonorTaker.DonorTaker> DonorTaker { get; set; }
        [DataMember] public virtual string Poids { get; set; }
        [DataMember] public virtual string Dvd { get; set; }
}
Voici mon code criteria qui ne fonctionne pas :

Code :
1
2
3
4
5
6
7
8
9
 
ICriteria crit = session.CreateCriteria(OrigineElement)
                .Add(Projections.Alias(Projections.Property("Number"), "Number"))
                .Add(Projections.Alias(Projections.Property("Description"), "Description"))
                .Add(Projections.Alias(Projections.Property("DonorTaker"), "DonorTaker"))
                .Add(Restrictions.Eq("Id", "50"));
                crit.SetResultTransformer(
                new NHibernate.Transform.AliasToBeanResultTransformer(OrigineElement));
                result = (OrigineElement)crit.UniqueResult();
Alors le resultat me retourne bien un objet avec le bon numéro, la bonne déscription par contre ma liste d'objet de type DonorTaker est null alors quelle devrait contenir plusieurs objet.

C'est la que je cale, si quelqu'un aurait quelques informations...

Merci d'avance !!

Bye
goute est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 12h07   #2
goute
Membre régulier
 
Avatar de goute
 
Homme Sylvain
Développeur éclectique
Inscription : novembre 2008
Messages : 187
Détails du profil
Informations personnelles :
Nom : Homme Sylvain
Âge : 34
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Développeur éclectique
Secteur : Finance

Informations forums :
Inscription : novembre 2008
Messages : 187
Points : 99
Points : 99
En faite ce n'est pas possible car une projection est forcement constituée d'une seule requête. Je pense que c'est possible en utilisant les sous requêtes mais je n'ai pas encore réussi , si quelqu'un aurait quelque chose à rajouter... une idée...
goute est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 10h00   #3
B.AF
Membre Expert
 
Inscription : février 2005
Messages : 1 238
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 238
Points : 1 655
Points : 1 655
Oui tu peux utiliser Linq ou QueryOver dans NH3. En même temps, un Get(50) donnerai le même résultat...

Je ne suis pas certain de comprendre pourquoi tu ne veux pas utiliser l'entité...s

Ou option 2 , tu utilises les entity name, et tu crées une entité read only (mutable=false), avec les propriétés qui t'intéressent, ce qui te permettra de faire ça de façon très clean et performante, car si il s'agit de consulter, tu pourras utiliser une session sans état.
B.AF est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h34.


 
 
 
 
Partenaires

Hébergement Web