0 votes

NHibernate avec mapping fluide et mise en cache de second niveau Syscache2

J'ai une entité Pays très simple que je veux mettre en cache. Cela fonctionne parfaitement, mais je veux qu'une version clonée de l'instance mise en cache soit renvoyée ou soit en lecture seule pour empêcher les développeurs de modifier son état.

Comment pourrais-je y parvenir ? Je pensais que la méthode Fluent Readonly() l'imposerait, mais ce n'est pas le cas.

Exemple de cartographie fluide :

        Id(x => x.Id);
        Map(x => x.Name).WithLengthOf(50).Not.Nullable().Unique();
        Map(x => x.IsoCode).WithLengthOf(10).Not.Nullable().Unique();
        HasMany(x => x.States).Cascade.None().LazyLoad();          
        Cache.AsReadOnly();

Mes tests unitaires indiquent clairement que les entités sont mises en cache et que la même entité est renvoyée lors de chaque obtention ultérieure, mais je veux que l'objet soit immuable une fois qu'il est chargé depuis le magasin persistant.

Merci !

3voto

John Rayner Points 2709

Si vous voulez que les instances de votre classe soient immuables (dans le sens où il est impossible de modifier les instances de l'objet), alors vous devrez écrire votre classe en conséquence - cela n'a rien à voir avec NHib ou Fluent NHib. Par exemple, faites correspondre NHib à des champs privés ou des setters de propriétés privées et n'exposez publiquement que les getters de propriétés.

Avec NHib, il est possible de spécifier "mutable=false" dans le mappage de votre classe (je ne sais pas comment faire cela avec FNH, désolé). Cela ne rend pas l'objet immuable à l'exécution, mais cela indique à NHib de ne pas vérifier les insertions, mises à jour et suppressions de ces entités.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X