J'utilise fluent NHibernate. Ce code charge une instance de type T de la base de données basée sur son identifiant.
public T GetById(IdT id, bool shouldLock) { T entity; if (shouldLock) { entity = (T) NHibernateSession.Load(persitentType, id, LockMode.Upgrade); } else { entity = (T) NHibernateSession.Load(persitentType, id); } return entity; }
3 Réponses :
J'utiliserais chercher au lieu de charger. Get Retournera NULL, au lieu d'une exception. P>
-1. Le type d'entité est nullable, il est probablement un type de référence.
Quoi qu'il en soit, la solution au problème est d'utiliser Get, plutôt que d'essayer une charge paresseuse ...
+1 C'est la bonne réponse, il manque simplement l'explication que j'ai donnée avec le mien.
Je pense que vous êtes trompé dans ce que Lorsque vous invoquez une propriété, il interrogera la base de données, si vous avez fourni un mauvais identifiant, aucun objet sous-jacent, l'exception. P>
Les situations normales que vous utiliserez ceci sont pour le cas indique que vous avez un objet de l'état et que l'utilisateur sélectionné PA dans une liste déroulante. Au lieu d'avoir à interroger la base de données pour l'objet State puisque vous avez déjà la clé PA, vous pouvez appeler La méthode que vous souhaitez utiliser pour obtenir un objet général ou obtenir NULL si la touche n'existe pas est juste charge code> fait. Ceci crée un objet de proxy NHibernate pour vous par ID sans interroger la base de données. P>
charger code>, puis transmettre cet objet d'état dans un objet différent pour avoir la relation correcte de l'objet X pour indiquer PA . P>
session.get
charge code> ne reviendra jamais null. Il retournera toujours une entité ou lancera une exception. Si vous souhaitez que le comportement utilise
obtenir code>. Plus d'infos sur cette différence entre obtenir et charger p>