thiosyiasar
Messages postés186Date d'inscriptionlundi 11 mars 2002StatutMembreDernière intervention30 novembre 20103 22 juil. 2008 à 17:45
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>
/// Type de référence
/// Active la recherche récusive
/// Niveau maxi
/// Niveau en cours
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)
{