2009-09-30 6 views
2

J'essaie d'aller chercher une liste de ma base de données répondant à un critère donné. L'instruction que j'utilise est: var products = session .CreateCriteria (typeof (Product)) .Add (Restrictions.Eq ("Catégorie", catégorie)) .List();Nhibernate - Obtenir une liste

Où, le produit est mon objet de domaine session est la session active en cours. Chaque fois que j'utilise cette instruction, NHibernate interroge la base de données à chaque fois pour aller chercher la liste au lieu de la faire seulement la 1ère fois et ensuite me rendre le résultat du cache à partir de la 2ème fois. Y a-t-il quelque chose que je fasse de mal?

Répondre

1

Il doit frapper la base de données, mais seulement pour récupérer les valeurs PK dans les résultats de la requête. Démonstration: définir un point d'arrêt sur cette ligne, l'exécuter une fois, puis mettre en pause avant de l'exécuter à nouveau. Modifiez la base de données directement pour modifier l'une des valeurs de l'objet, puis réexécutez la ligne. Vérifiez les résultats. Les entités renvoyées ne doivent pas refléter les modifications que vous avez apportées à la base de données (c'est-à-dire qu'elles proviennent du cache de session).

+0

Pour suivre ma démonstration, vous devez _modifier_ un enregistrement existant. Un enregistrement qui a été ajouté ne serait pas dans le cache après la première requête. –

+0

Merci pour la réponse rapide! –

+0

Savez-vous la raison pour laquelle il doit récupérer les valeurs PK de la base de données? En outre, connaissez-vous un bon lien pour WPF + MVVM + NHibernate ensemble? Merci! –

Questions connexes