begin process at 2012 02 11 12:29:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Système

 > 

Autre

 > 

NHibernate et lazy Fetching


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

NHibernate et lazy Fetching

mardi 22 juillet 2008 à 12:23:32 | NHibernate et lazy Fetching

thiosyiasar

Bonjour,

J'utilise nhibernate avec MySql j'ai un petit souci de Late Binding.

J'ai une classe Générique Service<T> avec la méthode suivante

Dans mon cas, T est la classe Personne qui contient un lien avec la classe Adresse

publicstatic T GetById(long id)

{

  ISession oSession = _oHibernate.GetNewSession();

  TEntity oEntity = oSession.Get<TEntity>(id);

  NHibernateUtil.Initialize(oEntity);

  oSession.Close();

  return oEntity;

}

Normalement, la méthode NHibernate.Initialize(object o) permet de charger toutes les instances référencés par oEntity mais cela ne fonctionne pas.

L'objet oEntity(Personne) est bien chargé mais les objet liées ne le sont pas (Adresse)...





Nico

mardi 22 juillet 2008 à 17:45:11 | Re : NHibernate et lazy Fetching

thiosyiasar

J'ai pas l'impression que ca inspire beaucoup de monde :o

J'ai trouvé une solution qui fonctionne mais je suis sure qu'Hibernate doit pouvoir gérer ca 

J'utilise cette méthode en donnant l'objet fraichement chargé par hibernate, le type de référence étant ma classe de base Entity


        /// <summary>
        /// Initialise toutes les propriétés dont le type de retour hérite de refType
        /// </summary>
        /// <param name="refType">Type de référence</param>
        /// <param name="recursive">Active la recherche récusive</param>
        /// <param name="maxlevel">Niveau maxi</param>
        /// <param name="currentlevel">Niveau en cours</param>
        protected void Initialize(object obj, Type refType, bool recursive, int maxlevel, int currentlevel)
        {
            // Lecture de propriétés de l'objet
            Type oType = obj.GetType();
            PropertyInfo[] oProperties = oType.GetProperties(BindingFlags.Public | BindingFlags.Instance);

            // Invocation de chaque propriété dérivant de refType
            foreach(PropertyInfo oProperty in oProperties)
            {
                Type oPropertyType = oProperty.PropertyType;
                if (       // Si propriété de type table ayant pour type d'élement refType
                        (  // ou si propriété de type refType
                            (oPropertyType.HasElementType && oPropertyType.GetElementType().IsSubclassOf(refType))
                            || (oPropertyType.IsSubclassOf(refType))
                        )  // et si définit dans l'assembly en cours
                        && oProperty.DeclaringType.Assembly.Equals(Assembly.GetExecutingAssembly())
                    )
                {
                   
                    object o = oProperty.GetGetMethod().Invoke(obj, new object[0]);
                    if (recursive && currentlevel < maxlevel)
                    {
                       
                        System.Diagnostics.Debug.WriteLine
                            ("FOUND (" + currentlevel + ") " + oProperty.DeclaringType.Name + "." + oProperty.Name + " : " + oPropertyType.ToString());
                        
                        this.Initialize(o, refType, recursive, maxlevel, ++currentlevel);
                        currentlevel--;
                    }
                }
            }
        }


Voila dans l'attente d'une solution plus propre

Nico

mardi 22 juillet 2008 à 17:47:04 | Re : NHibernate et lazy Fetching

thiosyiasar

oops j'oubliais

J'utilise cette méthode à la place de NHibernateUtil.Initialize(oEntity);,
juste avant de fermer la session.

Nico


Cette discussion est classée dans : classe, nhibernate, osession, lazy, oentity


Répondre à ce message

Sujets en rapport avec ce message

changer une propriété d'une instance de classe a partir d'une autre classe [ par xoco ] Bonjour, je suis un peu débutant en c# et j'ai un gros pb, c que a moins de définir dans ma classe principale une variable ou une fonction en "public Declaration dynamique d'une classe [ par Barz ] Comment par code peut-on executer une méthode d'une classe en dynamique, c'est à dire en ayant que une chaine correspondant au nom de la classe et une de la balles :) mais ... [ par Oziris ] merci a tous ceux qui ont mis des codes sources et pour toutes c infos je vien de trouver un truc en flash qui va peu etre m'aider pour mon site perso Classe Garphics [ par Nakah ] Voila je dessine une image dans mon panel grace a l'objet Graphics, maintenant je voudrais savoir s'il est possible d'enregistrer mon image, si oui co Accéder à une textBox depuis une autre classe [ par nicolson ] Salut tout le monde :)En fait, je veux rajouter une phrase à une textbox depuis une autre classe que Form1.Si ma classe Test hérite de Form1, je peux Acceder aux champs d une classe [ par RhinoReno ] Bonjour,j aurais besoin de savoir comment on peut acceder aux champs d'une classe a partir d'une fonction generee dans les events car moi g des erreur [CONCOURS] Question sur les droits [ par webboy ] Salut tout le monde,J'ai une question concernant les droits d'auteurs et (c)Je vais prendre l'exemple de la msdn..Je cherche comment faire quelque cho Pb de débutant... [ par gferrier ] Je débute et ce doit être en fait très simple...j'ai une classe Form1 contenant une case à cocher (cbEssai).si je fais un test dans cette classe lors Goto et LBL & classe [ par kaiwoo ] Sur calculette, il existe un fonction goto et lbl........ En fait, ca marche comme ca : LBL c'est le point de depart ... Quand le prgm arrive sur goto dialogue C++ - C# [ par rintchu ] Salut,j'ai dans un meme projet une classe C++ form12et une classe C# form1.Je voudrais apartir de form1 creer une instance de form12 , est ce possible


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales