Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre confirmé
    Profil pro
    Développeur .NET
    Inscrit en
    février 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

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

    Informations forums :
    Inscription : février 2005
    Messages : 147
    Points : 257
    Points
    257

    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.

  2. #2
    Membre confirmé
    Profil pro
    Développeur .NET
    Inscrit en
    février 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

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

    Informations forums :
    Inscription : février 2005
    Messages : 147
    Points : 257
    Points
    257

    Par défaut

    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

  3. #3
    Membre confirmé
    Profil pro
    Développeur .NET
    Inscrit en
    février 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

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

    Informations forums :
    Inscription : février 2005
    Messages : 147
    Points : 257
    Points
    257

    Par défaut

    Un modo qui passe par ici pourrait-il changer le titre du sujet en mapping by code nhibernate 3.2 ?

    Merci.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •