Введение:
В моем приложении я храню необработанные данные 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>();
}
}