Я использую NHibernate для доступа к базе данных в своем приложении. У моего ISession
s нет настойчивости, и я доволен этим, так как мне легче отделить мое приложение от разных слоев. Единственная трудность связана с ленивой загрузкой.Работа с ленивой загрузкой за пределами ISession?
У меня есть класс модели, которая выглядит следующим образом:
public class User {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Country CountryOfBirth { get; set }
public virtual Country CountryOfResidence {get; set; }
}
На данный момент у меня есть CountryOfBirth
и CountryOfResidence
набор для fetch="join"
. Однако, поскольку список стран в моей базе данных в основном статичен, я хочу кэшировать эти значения. Я изменил CountryOfBirth
свойство выглядеть следующим образом:
Country countryOfBirth;
public virtual Country CountryOfBirth{
get
{
if (country is INHibernateProxy)
countryOfBirth = CountryRepository.GetById(countryOfBirth.Id);
return countryOfBirth;
}
set { countryOfBirth = value; }
}
Однако, это требует мой класс модели, чтобы знать, что она используется NHibernate, который нарушает инкапсуляцию.
Есть ли лучший способ достичь этого? Например, есть ли способ заставить NHibernate автоматически проходить через мои классы репозитория, если он пытается загрузить прокси-сервер и срок его действия истек?
Или использовать другой метод?
Уход, спасибо. Я думаю, что кеш второго уровня - это то, что мне нужно. – Oliver