2009-06-17 6 views
0

J'ai 2 tables dans ma base de données:Comment voulez-vous gérer cette situation avec NHibernate

  • Catégorie
  • BlogEntry

Chaque BlogEntry a 1 ou plusieurs Category s qui y sont associés.

Si je veux obtenir un BlogEntry par son ID, je veux également obtenir ses informations Category. Cet exemple n'illustre pas exactement un scénario dans lequel cela aurait du sens, mais indique que je souhaite charger uniquement l'ID et le nom Category, et non toutes les autres colonnes de la base de données de catégories.

nHibernate chargerait-il toutes les colonnes/propriétés pour chaque entité?

Répondre

0

Cela dépend de la façon dont vous l'avez mappé. Apparemment, l'instrumentation de code binaire peut permettre de récupérer seulement des tables partielles mais il est rarement nécessaire.

Peut-être un explainantion pourquoi vous voulez que l'identifiant de la catégorie ...

Si vous définissez les applications de mise en veille prolongée et au lieu d'avoir la catégorie d'une entité qui correspond à un objet de la catégorie ont juste comme un entier . C'est ainsi que je gère mes mappings quand je ne me soucie pas de pouvoir récupérer les pièces jointes avec mes requêtes d'origine.

+0

Pourquoi? Comme je l'ai dit, pour éviter d'avoir à charger des colonnes que je n'ai pas besoin d'afficher. – Blankman

0

Vous souhaitez examiner les projections. Nous utilisons actuellement le transformateur AliasToBean pour que NHibernate convertisse directement nos projections en un DTO spécifique à l'écran.

1

Je gérerais cela en le mappant comme une association un-à-plusieurs entre BlogEntry et Category afin que BlogEntry dispose d'une collection de catégorie. Je le définirais pour que la collection Category soit chargée paresseusement. Je ne ferais pas attention à ce que je charge plus de colonnes que je ne vais afficher parce que je travaille avec des objets métier et que je sélectionne par clé primaire ou étrangère. C'est le travail de NHibernate de s'inquiéter à ce sujet, bien que je vérifierais pendant le développement en utilisant SQL Profiler ou NHProf. NHibernate chargera la collection en sélectionnant les enregistrements de catégorie en utilisant la clé étrangère de BlogEntry.

Dans la plupart des cas, il n'y a pas de gain de performance à ne récupérer que les champs que vous allez afficher. Récupérer des objets métier avec uniquement les propriétés requises remplies en fonction des exigences d'affichage n'est pas une bonne pratique orientée objet.

Questions connexes