La session de NHibernate ne met pas seulement la « unité de travail » modèle, mais il met également en œuvre la structure « identité Carte ». Autrement dit, lorsque vous récupérez une entité du magasin de données pour la première fois dans une session, NHibernate récupère cette entité à partir du DB.
Lorsque vous souhaitez récupérer à nouveau la même entité en utilisant la même session, NHibernate ne la récupèrera pas de la base de données, mais elle renverra la référence qu'elle a déjà récupérée. Bien entendu, ceci n'est vrai que si vous utilisez la même instance de session lorsque vous récupérez la même entité pour la deuxième fois. Lorsque vous apportez des modifications à une entité et que, pendant ce temps, quelqu'un d'autre change la même entité et conserve ces modifications dans la base de données, vous ne verrez pas ces modifications, car vous ne pouvez pas vous attendre à ce que NHIbernate la base de données entière, et vérifie si quelqu'un d'autre a changé (et a persisté) une entité que vous avez en mémoire.
Par conséquent, il est conseillé que vos sessions soient de courte durée. Afin de ne pas écraser les modifications de quelqu'un d'autre, vous pouvez facilement implémenter le verrouillage optimiste dans NHibernate. Mais, je me demande ... Êtes-vous sûr que NHibernate est une bonne solution pour votre problème? Quel genre d'application allez-vous construire?
Je ne comprends pas votre situation. Que voulez-vous dire par "grand ensemble de données"? Comment est-il structuré? S'agit-il de tant de lignes ou s'agit-il d'une seule goutte? Le modèle de base de données est-il déjà défini? Le modèle d'objet est-il déjà défini? Quel est le problème réel que vous devez résoudre? –