Question

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

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

Exemple de mappage Fluent:

        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 d'objects ultérieurs, mais je souhaite que l'objet soit immuable une fois chargé à partir du magasin persistant.

Merci!

Était-ce utile?

La solution

Si vous voulez que les instances de votre classe soient immuables (dans le sens où il est impossible de modifier les instances d'objet), vous devrez écrire votre classe selon: cela n'a rien à voir avec NHib ou Fluent NHib. Par exemple, mappez NHib sur des champs privés ou des utilisateurs de propriétés privées et exposez uniquement les acquéreurs de propriétés publiquement.

Avec NHib, il est possible de spécifier "mutable = false" sur votre cartographie de classe (vous ne savez pas comment procéder avec FNH, désolé). Cela ne rend pas l'objet immuable au moment de l'exécution, mais il informe NHib de ne pas rechercher les insertions, les mises à jour et les suppressions par rapport à ces entités.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top