2010-09-16 20 views
0

J'essaie de porter un grand graphe d'entités .NET pour utiliser NHibernate, mais je rencontre un problème que la plupart des relations ne sont définies que de manière unidirectionnelle - dans la plupart des cas, la classe enfant contient une référence au parent, mais le parent ne contient pas la collection de refs à ses enfants. Il faudrait beaucoup de travail pour ajouter toutes les collections pour transformer les relations en relations bidirectionnelles, alors je me demande quelles seraient les conséquences pour NHibernate de ne pas le faire? Une conséquence que j'ai remarquée est que les suppressions en cascade semblent échouer (l'enfant n'est pas supprimé dans la base de données, provoquant une violation d'intégrité référentielle). Est-ce la seule conséquence ou y a-t-il d'autres problèmes dont je dois être conscient?Quand puis-je utiliser des relations unidirectionnelles dans NHibernate?

Existe-t-il des lignes directrices sur le moment où les relations doivent être uniformes ou bidirectionnelles?

Merci

Répondre

1

je pense que ne pas pouvoir en cascade les suppressions sera le seul problème avec NHibernate en soi.

Mais vous ne serez pas en mesure de parcourir facilement le graphique. Vous pouvez le faire de l'enfant au parent, mais évidemment pas du parent à l'enfant. Donc, vous devrez émettre une requête chaque fois que vous voulez tous les enfants d'un parent. Donc, si vous utilisez NH pour un modèle de domaine persistant, où vous avez un objet racine à partir duquel vous devez utiliser les objets enfants pour certaines opérations, vous devrez émettre des requêtes depuis le modèle pour obtenir les enfants. Votre modèle sera donc couplé à votre accès aux données. Ou vous devrez passer les enfants à l'objet parent en tant que collections, mais alors il pourrait être facile d'avoir les collections sur le modèle pour commencer la largeur afin NH pourrait les remplir pour vous.