2010-11-09 3 views
0

J'utilise NHibernate 2.1.2, et je voudrais charger une association plusieurs-à-un en utilisant une formule. Étant donné une entité de domaine arbitraire E [X], il existe un calcul pour dériver la clé primaire de l'entité précédente E [X-1]. Je voudrais que chaque entité soit chargée en tant que nœud dans une liste chaînée, chaque entité ayant une propriété "Précédent" qui est chargée paresseusement en utilisant cette formule, donc je peux parcourir l'historique si je le souhaite. En d'autres termes, aucune référence directe à l'entrée précédente n'est stockée dans l'entrée en cours, mais une formule est disponible pour calculer la clé précédente.NHibernate plusieurs-à-un par la formule?

J'ai essayé de spécifier "formule" pour un plusieurs-à-un, mais bien sûr il échoue avec "le mappage de propriété a un nombre incorrect de colonnes". D'autres suggestions pour atteindre cet objectif?

Répondre

0

Le problème était un bogue dans la série NHibernate 2.x. J'ai mis à niveau vers la version bêta de NHibernate 3.0, et les problèmes ont été résolus.

1

Ceci serait mieux réalisé en utilisant un PostLoadEventListener.

+0

Cela semble faisable, mais avant que j'y mette trop de travail, comment puis-je m'assurer que l'entité "précédente" est paresseusement chargée? J'ai spécifié toutes les informations nécessaires dans le fichier de mappage, mais je ne vois pas d'interfaces disponibles via PostLoadEvent qui me permettent de spécifier un proxy à renvoyer à la place de la classe concrète. – naasking

+0

Je pense que je l'ai trouvé dans l'interface IEntityPersister accessible via la classe PostLoadEvent. J'apprécie toute votre aide! – naasking

+0

J'ai fait quelques tests préliminaires et je crains que ces auditeurs d'événements soient brutalement lents; Je parle d'un ralentissement de 3-4x par rapport au comportement précédent, et cela sans même créer le proxy (juste quelques tests de type sur les objets chargés). Je ne vois pas de moyen facile de réduire l'ensemble de données pour rendre cette surcharge gérable, donc cette solution ne fonctionnera pas pour moi. – naasking

Questions connexes