Предисловие :
В моем приложении я храню необработанные данные WAV в базе данных как байт []
. В моей модели предметной области есть класс PcmAudioStream
, который представляет эти необработанные данные WAV. Я создал реализацию NHibernate IUserType
для преобразования между моим классом и байтом []
.
Есть несколько классов, которые используют класс PcmAudioStream
, и все они отображаются в таблицы базы данных. Чтобы избежать постоянной загрузки всех данных WAV при извлечении строки из такой таблицы, я создал реализацию Fluent NHibernate IUserTypeConvention
, которая указывает, что эти свойства всегда должны загружаться лениво.
Все это работает как шарм.
Вопрос:
Поскольку содержимое этих PcmAudioStream
редко меняется, я хочу поместить полученные экземпляры в кэш второго уровня. Теперь я знаю, как активировать кеш второго уровня для полного класса, но как мне добиться этого только для ленивого загруженного свойства?
Соответствующая часть моей модели предметной области выглядит так:
public class User : Entity
{
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual PcmAudioStream FullNameRecording { get; set; }
// ...
}
Отображение простое (примечание: это не мое отображение, я использую соглашение, но оно эквивалентно):
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id);
Map(x => x.FirstName);
Map(x => x.LastName);
Map(x => x.FullNameRecording).CustomType<PcmAudioStreamAsByteArray>();
}
}