2008-09-26 4 views
4

Voici le scénario:Comment puis-je récupérer la dernière version de la base de données en utilisant NHibernate après une mise à jour?

J'ai une application winforms utilisant NHibernate. Une fois lancé, je remplis un DataGridView avec les résultats d'une requête NHibernate. Cette partie fonctionne bien. Si je mets à jour un enregistrement dans cette liste et vide la session, la mise à jour prend dans la base de données. Lors de la fermeture du formulaire après la mise à jour, j'appelle une méthode pour récupérer une liste d'objets pour remplir à nouveau le DataGridView afin de prendre en compte le changement et d'obtenir tous les autres changements qui pourraient avoir été effectués par quelqu'un d'autre. Le problème est que l'enregistrement qui a été mis à jour, NHibernate ne reflète pas le changement dans la liste qu'il me donne. Lorsque j'insère ou supprime un enregistrement, tout fonctionne correctement. C'est juste quand je mets à jour, que j'ai ce comportement. Je l'ai réduit à NHibernate avec leur mécanisme de mise en cache. Je n'arrive pas à trouver un moyen de récupérer NHibernate de la base de données au lieu d'utiliser le cache après une mise à jour. J'ai posté sur les forums de NHibernate, mais les suggestions qu'ils m'ont données n'ont pas fonctionné. J'ai déclaré cela et personne n'a répondu. Je ne vais pas dire ce que j'ai essayé au cas où je ne l'aurais pas fait correctement. Si vous répondez avec quelque chose que j'ai essayé exactement, je l'indiquerai dans les commentaires de votre réponse.

Voici le code que j'utilise pour récupérer la liste:

public IList<WorkOrder> FindBy(string fromDate, string toDate) 
{ 
    IQuery query = _currentSession.CreateQuery("from WorkOrder wo where wo.Date >= ? and wo.Date <= ?"); 
    query.SetParameter(0, fromDate); 
    query.SetParameter(1, toDate); 
    return query.List<WorkOrder>(); 
} 

La session est transmise à la classe quand il est construit. Je peux aussi poster mon fichier de mapping, mais je ne suis pas sûr qu'il y ait quelque chose qui ne va pas, puisque tout le reste fonctionne. Quelqu'un a déjà vu ça? C'est le premier projet que j'ai utilisé NHibernate, merci pour l'aide.

+0

J'ai le même problème dans mon application, bien que j'utilise Castle ActiveRecord. Quand je trouverai une réponse, je l'afficherai. Si vous trouvez une réponse, faites-le nous savoir! – FryHard

+0

@FryHard - Fera! –

Répondre

0

qu'en est-il de l'actualisation? - voir 9.2. Loading an object des docs:

« sess.Save (chat); sess.Flush(); // forcer SQL INSERT sess.Refresh (cat); // re-lecture de l'état (après la le déclencheur s'exécute) "

3

Après votre mise à jour, expulsez l'objet du cache de premier niveau.

Session.Update(obj); 
Session.Evict(obj); 

Vous pouvez valider et/ou vider d'abord.

Questions connexes