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

StackOverflow https://stackoverflow.com/questions/650836

Вопрос

У меня есть очень простой объект 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();

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

Спасибо!

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top