J'ai un problème de cache dans Fluent NHibernate. Je veux le désactiver pour une requête par ID, par exempleCache NHibernate Disable Cache
session.Get<Person>(10);
Avez-vous des idées?
J'ai un problème de cache dans Fluent NHibernate. Je veux le désactiver pour une requête par ID, par exempleCache NHibernate Disable Cache
session.Get<Person>(10);
Avez-vous des idées?
Faites-vous référence au cache de premier niveau (session)?
Vous pouvez actualiser l'état d'une entité de la base de données en utilisant Refresh, qui est:
// Will get the state from the first-level cache if already present in the session:
var entity = Session.Get<EntityType>(entityId);
// Line below will update the entity with the current state from the database:
Session.Refresh(entity);
Si l'entité n'était pas déjà dans le cache, cela entraînera deux requêtes sur la base de données. –
C'est vrai. Je crois que si la situation est comme ci-dessus (vous n'avez pas de référence à l'entité que vous souhaitez actualiser) Session.Load pourrait être utilisé à la place de Session.Get pour éviter cela. –
Si vous détenez déjà l'entité, appelez directement session.Refresh(person)
sur elle au lieu de l'obtenir à nouveau.
Vous pouvez également l'exclure avec session.Evict(person)
, l'empêchant ainsi d'être dans la session, et non plus suivi des modifications. Puis jetez-le et éventuellement le récupérer plus tard si vous en avez besoin.
Sinon, il est inhabituel de considérer qu'il est difficile de l'obtenir à partir du cache de session. Ceci est souvent un signe de mauvaise utilisation de la session, comme l'utilisation d'une même session à travers de nombreuses interactions utilisateur (anti-pattern).
Vous pouvez toujours faire Fredy proposes. Ou appelez session.Clear()
avant d'obtenir pour effacer le cache de session (et en perdant toutes les modifications en attente d'ailleurs).
Il serait bon que vous puissiez expliquer le problème que vous avez un peu plus. –
Vous demandez peut-être comment appliquer une mauvaise solution à votre problème réel. –