2009-10-02 5 views
2

J'ai un objet utilisateur qui peut avoir plusieurs messages.Chargement paresseux partiel

Exemple:

Charge l'utilisateur avec le chargement paresseux sur les messages IList<User> users = User.LoadAll()

Je veux lire que « la moitié » de la users[2].Posts[3] (récupérer uniquement les attributs que je veux et pas tous de cet objet post), est-ce possible?

(Remarque, je ne souhaite pas utiliser de vue).

Editer: Quelqu'un pourrait-il me donner un simple exemple de code s'il vous plaît? J'ai essayé d'en trouver un sans succès. Merci

Répondre

2

Si je comprends bien votre question - vous voulez obtenir un objet - Post dans votre cas - mais seulement certaines de ses propriétés - par ex. Post.Annotation et non Post.Content qui sont tous deux des chaînes.

Ce n'est pas possible pour le moment. Chaque objet récupéré de la base de données aura toutes ses propriétés qui ne sont pas des relations ni des collections chargées.

Vous pouvez faire une solution de contournement:

  1. en tournant les propriétés biggish dans une entité distincte, puis faire beaucoup à une cartographie et d'utiliser paresseux chargement

  2. en créant sur mesure interrogez soit HQL, soit des critères avec des projections (essentiellement quelques colonnes). Cela ne retournera cependant pas l'objet complet.

Espoir Je suis votre bonne question ...

+0

Oui, c'était ma question, être en mesure de se charger paresseux obtenir seulement quelques propriétés de cet objet et non pas tous. Je me demandais si l'équipe de NHibernate penserait à un moyen de créer un "mappage par chargement paresseux personnalisé", permettant d'avoir plus d'une façon de charger un objet (plein, une partie de celui-ci). – Dryadwoods

-2

Oui, c'est possible. Lorsque NHibernate reconstitue un objet à partir de la base de données, il peut également reconstituer tous les membres de l'objet, en créant un graphe d'objet entier. C'est ce qu'on appelle cascadant, c'est une propriété d'une association définie dans votre fichier de mappages, et par le son de choses que vous ne voulez pas. Voir la docuemntation pour plus.

-1

Bien sûr. Il suffit de déclarer une propriété supplémentaire d'un type de collection (par exemple 'map') dans votre classe 'User', de définir son attribut 'lazy' à false et l'attribut 'where' à la clause SQL-where requise. .

Questions connexes