Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : NHibernate et lazy Fetching [ Système / Autre ] (thiosyiasar)

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é 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

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.