У моих DTO есть ID, который используется моей базой данных, обычно с автоматически увеличивающимся INT. Моему приложению, в общем-то, наплевать на это поле идентификатора, оно стремится искать DTO по их свойству Name. Который дал этот метод на моем уровне доступа к данным:
public T GetByName(string name)
{
return (T) Session
.CreateCriteria(typeof (T))
.Add(Expression.Eq("Name", name))
.UniqueResult();
}
Теперь, что я заметил, поскольку именно так я загружаю подавляющее большинство своих DTO, так это то, что nHibernate не кэширует результат. Я смог наблюдать через SQL Profiler, что каждый вызов этого метода приводит к обращению в базу данных, даже если я уверен, что я загружал этот конкретный объект во время своей единицы работы ( HTTP транзакция).
Кроме того, я прочитал, что nHibernate будет кэшировать DTO в кеше 1-го уровня при вызове .Load ().
Итак, мой вопрос: есть ли способ настроить nHibernate для помещения моих DTO в кэш 1-го уровня после загрузки таким образом, или мне нужно найти другой способ уменьшить количество обращений к моей базе данных?