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 23/02/2012, 12h11   #1
xarkam
Membre actif
 
Inscription : février 2005
Messages : 85
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 85
Points : 153
Points : 153
Envoyer un message via Skype™ à xarkam
Par défaut mapping by code nhibernate 3.2

Bonjour,

Ma femme et moi nous nous lançons dans NHibernate 3.2.
Notre soucis est que nous n'arrivons pas à obtenir le résultat d'un queryover.
(On fait du mapping)

Je vous donne le code car nous avons du mal à définir pourquoi il ne cale pas la session comme il se doit.
Code :
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
 
class Program
    {
        static void Main(string[] args)
        {
            try
            {              
                Program programtest = new Program();
                // programtest.InitializeDbConnection();
                //NhibernateHelper.OpenSession();
                NHibernate.ISession _session = NhibernateHelper.OpenSession();
 
                PersonneQuery _lecture = new PersonneQuery(_session);
            }
            catch(Exception ex)
            {
                Console.WriteLine(string.Format("{0} {1}",ex.Message, ex.StackTrace));
            }
        }      
    }
 
public class NhibernateHelper
    {
        private static ISessionFactory _sessionFactory;
 
        public static ISessionFactory SessionFactory
        {
            get
            {
                /*if (_sessionFactory == null)
                {
                    InitializeSessionFactory();
                }*/
                return InitializeSessionFactory();
 
            }
        }
 
        private static ISessionFactory InitializeSessionFactory()
        {
            // ModelMapper : modèle de mapping qui peut éventuellement contenir des règles génériques (tag <hibernate-mapping>).
         var mapper = new ModelMapper();
            mapper.AddMappings(Assembly.GetExecutingAssembly().GetExportedTypes());
            HbmMapping domainMapping = mapper.CompileMappingForAllExplicitlyAddedEntities();
 
            // Config accès DB en elle-même.
            var configuration = new Configuration();
            configuration.DataBaseIntegration(c =>
            {
                c.Dialect<MsSql2008Dialect>();
                c.ConnectionString = @"Data Source=192.168.1.201;Initial Catalog=testing;Integrated Security=false;User ID=toto;Password=totoenslip;Pooling=False";              
                c.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
                //permet d'afficher le sql généré par nhibernate
                c.LogFormattedSql = true;
                c.LogSqlInConsole = true;
                c.AutoCommentSql = true;
            });
 
            // Session d'accès à la DB : ready to use.
            _sessionFactory = configuration.BuildSessionFactory();
 
            return _sessionFactory;
        }
 
        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }
    }
 
 public class Personne
    {
        public virtual int Id { get; set; }
        public virtual string Nom { get; set; }
        public virtual string Prenom { get; set; }
    }
 
public class PersonneMap<T> : ClassMapping<T> where T : Personne
    {
        public PersonneMap()
        {
            Id(x => x.Id);
            Property(x => x.Nom);
            Property(x => x.Prenom, map => map.Type(NHibernateUtil.String));
            Table("test_nhibernate");
        }
 
    }
 
public class PersonneQuery
    {
 
        public PersonneQuery(NHibernate.ISession session_)
        {            
            Console.WriteLine("lisons la DB maintenant");
            IList<Personne> _listresult = session_
                .QueryOver<Personne>()
                .Where(p => p.Nom =="toto")
                .List();
 
            Console.WriteLine("{0}", _listresult.Count);
            foreach (var personne in _listresult)
            {
                Console.WriteLine("Prenom:{0}", personne.Prenom);
            }                
        }
 
        public static void ListPersonnes(ISession session_)
        {
            IList<Personne> lstPersonne = session_
                .QueryOver<Personne>()
                .List();
            Console.WriteLine("{0}", lstPersonne.Count);
            foreach (var personne in lstPersonne)
            {
                Console.WriteLine("Prenom:{0}", personne.Prenom);
            }    
        }
    }
Edit: je vous met le repository gti: http://babi.homelinux.net/gitweb/?p=....git;a=summary

Merci.
xarkam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2012, 21h59   #2
xarkam
Membre actif
 
Inscription : février 2005
Messages : 85
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 85
Points : 153
Points : 153
Envoyer un message via Skype™ à xarkam
Après une semaine de recherche vers de bout de codes à chaque fois différents, voici un bout de code fonctionnelle.

Code :
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
 
using System;
using System.Collections.Generic;
using System.Linq;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Cfg.MappingSchema;
using NHibernate.Dialect;
using NHibernate.Mapping.ByCode;
 
namespace NHibernate_console
{
    class Program3
    {
        public Program3()
        {
            ISession session2 = NHibernateHelpers3.InitializeSessionFactory().OpenSession();
            PersonneQuery3 pq3 = new PersonneQuery3(session2);
        }
 
    }
 
    public interface IClassMap2
    {
        void Map(ModelMapper mapper_);
    }
 
    public class Personne3
    {
        public virtual int Id { get; set; }
        public virtual string Nom { get; set; }
        public virtual string Prenom { get; set; }
    }
 
    public class Personne3Map : IClassMap
    {
        public void Map(ModelMapper mapper_)
        {
            mapper_.Class<Personne3>(m =>
                                        {
                                            m.Id(x => x.Id);
                                            m.Property(x => x.Nom);
                                            m.Property(x => x.Prenom);
                                            m.Table("test_nhibernate");
                                        }
            );
        }
    }
 
    public class NHibernateHelpers3
    {
        private static ISessionFactory _sessionFactory;
 
        public static ISessionFactory InitializeSessionFactory()
        {
            // Initialisation mapper
            ModelMapper mapper = new ModelMapper();
 
            // Remplissage du mapper en utilisant IClassMap
            // Remarque : ici il va inspecter l'assembly d'un type précis.            
            foreach (var map in typeof(NHibernateHelpers3).Assembly
                                                          .GetTypes()
                                                          .Where(t => t.IsClass && !t.IsAbstract && typeof(IClassMap2).IsAssignableFrom(t))
                                                          .Select(Activator.CreateInstance)
                                                          .OfType<IClassMap2>())
            {
                Console.WriteLine(string.Format("Class to map : {0}", map.GetType().FullName));
                map.Map(mapper);
            }
 
            HbmMapping domainMapping = mapper.CompileMappingForAllExplicitlyAddedEntities();
 
            // Config accès DB en elle-même.
            var configuration = new Configuration();
            configuration.DataBaseIntegration(c =>
            {
                c.Dialect<MsSql2008Dialect>();
                c.ConnectionString = @"Data Source=192.168.1.201;Initial Catalog=testnhibernate;Integrated Security=false;User ID=test;Password=test;Pooling=False";
                c.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
            #if debug
                //permet d'afficher le sql généré par nhibernate
                c.LogFormattedSql = true;
                c.LogSqlInConsole = true;
                c.AutoCommentSql = true;
            #endif
            });
 
            // Association Model mapper et configuration
            configuration.AddMapping(domainMapping);
 
            // Session d'accès à la DB : ready to use.
            _sessionFactory = configuration.BuildSessionFactory();
            return _sessionFactory;
        }
    }
 
    public class PersonneQuery3
    {
        public PersonneQuery3(NHibernate.ISession session_)
        {
            Console.WriteLine("lisons la DB maintenant");
 
            IList<Personne3> lstPersonnes = session_.QueryOver<Personne3>()
                                                    .Where(p => p.Nom == "toto")
                                                    .List();
 
            int iCount = lstPersonnes.Count;
            Console.WriteLine(string.Format("{0} enregistrements", iCount));
 
            for (int i = 0; i < iCount; i++)
            {
                Console.WriteLine(string.Format("Nom : {0}, Prénom : {1}", lstPersonnes[i].Nom, lstPersonnes[i].Prenom));
            }
            Console.ReadKey();
        }
    }
}
Voila, si ca peut aider ceux qui recherchent à faire du mapping by code avec nhibernate 3.2

Un billet intéressent à lire: http://kazimanzurrashid.com/posts/nh...ent-nhibernate
xarkam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2012, 08h43   #3
xarkam
Membre actif
 
Inscription : février 2005
Messages : 85
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 85
Points : 153
Points : 153
Envoyer un message via Skype™ à xarkam
Un modo qui passe par ici pourrait-il changer le titre du sujet en mapping by code nhibernate 3.2 ?

Merci.
xarkam est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h42.


 
 
 
 
Partenaires

Hébergement Web