Я использую NHibernate и указал регион кэша в моей конфигурации NHibernate:
<cache region="HalfHour" expiration="1800" priority="3" />
У меня есть определение объекта (UserDefinedGroup
) который установлен использовать этот регион кэша в режиме чтения-записи:
<class name="UserDefinedGroup" table="Message_Groups">
<cache region="HalfHour" usage="read-write" />
...
</class>
У меня также есть запрос HQL, который установлен использовать кэш запроса, поскольку он возвращает большое количество экземпляров UserDefinedGroup:
var results = Session.CreateQuery("from UserDefinedGroup order by Name")
.SetCacheable(true)
.SetCacheRegion("HalfHour")
.List<UserDefinedGroup>();
Однако, когда я пытаюсь удалить экземпляр UserDefinedGroup
Я получаю следующую ошибку даже при том, что объект установлен использовать кэш чтения/записи.
ReadOnlyCache: не Может записать в объект только для чтения Cristal. Модель. UserDefinedGroups. UserDefinedGroup
Я полностью упускаю суть или неправильно понимаю NHibernate, кэширующийся здесь? Я ожидал бы, что это для выполнения удаления и кэша заботится о себе соответственно, но ясно этого не происходит.
Используется ли эта область кэша другими объектами? Если да, то существуют ли случаи использования кеша только для чтения? В конкретном регионе должен быть только один тип использования.