Введение:
В моем приложении я храню необработанные данные WAV в базе данных как byte[]. В моей модели домена есть класс PcmAudioStream, который представляет эти необработанные данные WAV. Я создал реализацию NHibernate IUserType для преобразования между моим классом и byte[].
Существует несколько классов, которые используют класс 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>();
}
}