2010-07-08 6 views
0

J'ai écrit ma propre couche de mise en cache pour mes objets qui proviennent de l'accès aux données. Mon raisonnement ici est que je voudrais que ma couche d'accès aux données fasse exactement cela - l'accès aux données. Je ne veux pas vraiment m'inquiéter de la mise en cache, et je voudrais seulement aller dans cette couche quand j'ai besoin d'extraire des données de la base de données. Peut-être que ce n'est pas la bonne façon de penser aux choses - s'il vous plaît laissez-moi savoir si je suis hors piste.Mise en cache d'objets et de choses dans NHibernate

Quoi qu'il en soit, il y a au moins un problème auquel j'ai participé jusqu'à présent. Dans un scénario, je charge un objet à partir de NHibernate et le place dans le cache dans une requête. Dans la requête suivante, j'obtiens cet objet du cache, je le modifie et je redescends sur NHibernate pour le sauvegarder. Evidemment NHibernate vomit, dans ce cas particulier avec une exception "Illegal attempt to associate a collection with two open sessions".

Donc, ma question est, je suppose, y at-il quelque chose que je devrais savoir ou faire pour que cela fonctionne? Ou devrais-je simplement utiliser un cache de second niveau intégré à NHibernate?

Répondre

2

NHibernate a la mise en cache pour une raison .. utiliser :)

Vous trouverez il y a quelques options pour un second fournisseur de cache de niveau qui vous donnent beaucoup plus de flexibilité pour moins cher alors vous pourriez construire vous-même . Un exemple parfait est quelque chose comme memcache si vous décidez que vous devez exécuter un service sur plusieurs systèmes.

+0

Génial, merci - oui, memchached était quelque chose que j'espérais soutenir. Maintenant que j'y pense, je n'ai pas vraiment de scénarios dans lesquels je mettrais en cache des données qui * ne sortent pas de la base de données ou de NHibernate, donc c'est logique. –