NHibernate с беглым отображением и Syscache2 кэширования второго уровня - PullRequest
0 голосов
/ 16 марта 2009

У меня есть очень простая сущность Country, которую я хочу кэшировать. Это прекрасно работает, но я хочу, чтобы клонированная версия кэшированного экземпляра была возвращена или сделана доступной только для чтения, чтобы разработчики не могли изменить ее состояние.

Как бы я этого достиг? Я думал, что метод Fluent Readonly () будет обеспечивать это, но это не так.

Образец Fluent Mapping:

        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();

Мои модульные тесты ясно показывают, что сущности кэшируются и что одна и та же сущность возвращается при последующих получениях, но я хочу, чтобы объект был неизменным после загрузки из постоянного хранилища.

Спасибо!

1 Ответ

3 голосов
/ 17 марта 2009

Если вы хотите, чтобы экземпляры вашего класса были неизменяемыми (в том смысле, что невозможно изменять экземпляры объектов), тогда вам нужно написать свой класс в соответствии с этим - это никак не связано с NHib или Fluent NHib. Например, сопоставьте NHib с частными полями или установщиками частной собственности и публично выставляйте только получатели свойства.

С NHib можно указать "mutable = false" в вашем отображении классов (не знаю, как это сделать с FNH, извините). Это не делает объект неизменным во время выполнения, но предупреждает NHib не проверять наличие вставок, обновлений и удалений для этих объектов.

...