내 응용 프로그램에서 데이터베이스 액세스를 수행하기 위해 NHibernate를 사용하고 있습니다. 내 ISession
에는 지속성이 없으며 응용 프로그램을 다른 레이어로 쉽게 구분할 수있어 기쁘게 생각합니다. 유일한 어려움은 좋은 방법으로 게으른 로딩을 다루는 것입니다. , 순간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
및 fetch="join"
-CountryOfResidence
설정 :
나는이처럼 보이는 모델 클래스가 있습니다. 그러나 데이터베이스의 국가 목록이 대부분 정적이어서 이러한 값을 캐시하고 싶습니다. I는 다음과 같이 할 수 CountryOfBirth
속성을 변경 :
Country countryOfBirth;
public virtual Country CountryOfBirth{
get
{
if (country is INHibernateProxy)
countryOfBirth = CountryRepository.GetById(countryOfBirth.Id);
return countryOfBirth;
}
set { countryOfBirth = value; }
}
그러나, 그것이 캡슐화를 나누기 NHibernate에 의해 사용되고 있음을 알고 내 모델 클래스가 필요합니다.
더 좋은 방법이 있나요? 예를 들어, NHibernate가 프록시를로드하려고 시도하고 세션이 만료 된 경우 자동으로 Repository 클래스를 통과하도록하는 방법이 있습니까?
아니면 다른 방법을 사용해야합니까?
감사합니다. 두 번째 수준의 캐시가 필요한 것이라고 생각합니다. – Oliver