2009-11-10 5 views
0

J'ai un client de classe comme ça:coulée NHibernate Lazy objets chargés (problème Proxy)

public class Client{ 
    public Person Pers { get; set; } 
} 

Et je 2 Person's classe enfant:

public class PersonType1 : Person {...} 
public class PersonType2 : Person {...} 

Maintenant je charger un client. .. et je dois obtenir les attributs PersonType1 ou PersonType2 ..

J'ai essayé:

var _pj = ((PersonType1) _client.Pers); 

Mais cela ne fonctionne pas, parce que le type _client.Pers est un proxy (charge Lazy vrai) ...

Est-il possible de le faire? J'ai plusieurs attributs dans chaque PersonType, il est donc pas une bonne idée de créer un override virtuel/pour chaque attribut (Person-> PersonType1) ...

Merci

+0

Est-ce que ce travail même avec lazy = "false"? Si 'Pers' est un type de proxy de PersonType1 ce casting fonctionnerait par nature du polymorphisme. Ma conjecture est qu'elle ne retourne pas 'PersonType1', mais 'Person'. – Trent

Répondre

2

Vous pouvez essayer de chercher avec impatience la propriété Pers:

var client = session 
    .CreateCriteria<Client>() 
    .CreateCriteria("Pers", JoinType.LeftOuterJoin) 
    .Add(Expression.IdEq(1)) 
    .UniqueResult<Client>(); 
var pj = (PersonType1)client.Pers; 
0

Si vous utilisez NH dans le serveur, et déplacez les objets vers le client, vous ne pouvez pas utiliser la charge paresseuse. Ce que NH sait (dans le serveur) n'aide pas le client, qui n'a ni session ni savoir comment extraire les données supplémentaires en cas de besoin.

Questions connexes