NHibernate с плавным отображением и кэшированием второго уровня Syscache2

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

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

Пример свободного отображения:

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

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

Спасибо!


person George Smith    schedule 16.03.2009    source источник


Ответы (1)


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

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

person John Rayner    schedule 16.03.2009