2010-07-28 4 views
0

J'ai une hiérarchie d'objets Parent-> Enfant (Chargement par défaut est défini sur true par défaut) Maintenant, je charge tous les objets parents de la base de données. Tout l'objet enfant aura le type ChildProxyGUID.Après avoir appelé NHibernate.Initialize (proxyObject) je me trompe objectType

alors j'écrire le

IList<Parent> parentList = NHibernateHelper.List<Parent>(); 
foreach(Parent parent in parentList) 
{ 
    if(!NHibernateUtil.IsInitialized(parent.Child)) 
    { 
    NHibernateUtil.Initialize(parent.Child); 
    if(parent.Child.GetType() != typeof(Child)) //parent.Child.GetType() return me proxy type 
     throw new ArgumentException("wrong type"); 
    } 
} 

Comment puis-je convertir parent.Child type réel "enfant". J'ai besoin du vrai type (Enfant) à cause de la vérification du système. Cet exemple est simple dans la vie réelle J'ai des mappings et des relations très compliquées.

Des idées là-bas?

Répondre

0

Essayez avec:

var realObject = session.GetSessionImplementation() 
         .PersistenceContext.Unproxy(parent.Child) 

Cependant, il est une mauvaise idée d'avoir votre code repose sur ce type de contrôles, car il viole la LSP, la création de code qui est plus difficile à maintenir.

+0

Tout à fait d'accord avec vous sur LSP. J'ai donc fait quelques changements dans le noyau, et maintenant cela fonctionne avec les classes Proxy. Merci – Step

Questions connexes