2012-05-03 5 views
0

내 응용 프로그램에서 데이터베이스 액세스를 수행하기 위해 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; } 
} 

나는 CountryOfBirthfetch="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 클래스를 통과하도록하는 방법이 있습니까?

아니면 다른 방법을 사용해야합니까?

답변

2

캐시 기능을 추가하려면 NHibernate L2 캐시를보십시오. 이 자습서 http://nhforge.org/blogs/nhibernate/archive/2009/02/09/quickly-setting-up-and-using-nhibernate-s-second-level-cache.aspx을 확인하고이 항목을 검색하십시오. 캐시를 사용하면 NH 프록시, 리포지토리 등을 사용하여 모델을 분류 할 필요가 없습니다.

+0

감사합니다. 두 번째 수준의 캐시가 필요한 것이라고 생각합니다. – Oliver