NHibernate com mapeamento fluente e Syscache2 segundo cache nível
-
19-08-2019 - |
Pergunta
Eu tenho uma entidade País muito simples que eu quero cache. Isso funciona perfeitamente, mas eu quero uma versão clone da instância em cache a ser devolvido ou ser feitos somente leitura para impedir que os desenvolvedores alterar o estado do mesmo.
Como eu poderia conseguir isso? Eu pensei que o método Fluente somente leitura () iria impor isso, mas não é o caso.
Mapping Fluente Amostra:
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();
Os meus testes de unidade indica claramente que as entidades são armazenados em cache e que a mesma entidade é devolvido no recebe posterior, mas quero que o objeto a ser imutável uma vez que é carregado a partir do armazenamento persistente.
Obrigado!
Solução
Se você quiser instâncias de sua classe para ser imutável (no sentido de que é impossível modificar instâncias de objetos), então você precisa para escrever sua classe de acordo - Não tem nada a ver com NHib ou Fluente NHib. Como exemplo, mapear NHib em campos privados ou setters de propriedade privada e só expor getters de propriedade do público.
Com NHib é possível especificar "mutável = false" no seu mapeamento de classe (não sei como fazer isso com FNH, sorry). Isso não faz o imutável objeto em tempo de execução, mas não informar NHib não para verificar se há inserções, atualizações e exclusões contra essas entidades.