유창한 nhibernate에서 엔티티와 관계에 대한 캐싱을 설정 하시겠습니까?

StackOverflow https://stackoverflow.com/questions/1502794

  •  19-09-2019
  •  | 
  •  

문제

누구나 설정하는 방법과 유창한 nhibernate로 캐시 할 엔티티가 예를 들어 있습니까? 유창한 매핑과 자동 매핑을 사용합니까?

그리고 엔티티 관계에 대해서도 일대일과 다수 모두가 동일합니까?

도움이 되었습니까?

해결책

나는 특정 요소를 캐시하고 싶을 때 비슷한 상황에서 일하고 있으며,이 요소가 시작시 한 번만로드하고 응용 프로그램이 종료 될 때까지 캐시에 보관하기를 원합니다. 이것은 읽기 전용 캐시이며, 사용자가 목록에서 국가를 선택할 수 있도록 국가 목록을 채우는 데 사용됩니다.

나는 fluentnhibernate 매핑을 사용했고 cache.readonly ()로 내 클래스를 정의했습니다.

public class CountryMap : ClassMap<Country> {
    public CountryMap() { 
         Schema("Dropdowns");
         Cache.ReadOnly();
         // Class mappings underneath 
    }
}

내 사용자 수업 맵은 다음과 같습니다.

public class UserMap : ClassMap<User> {
    Id(x => x.Id).Column("UserId");
    Map(x => x.FirstName);
    Map(x => x.LastName);
    References(x => x.Country)
      .Column("CountryId");
}

유창한 nhibernate를 수동으로 구성하여 2 단계 캐시를 사용합니다. 그래서 유창한 혼란에서 나는 다음과 같습니다.

var sessionFactory = Fluently.Configure()
    .Database (...) // set up db here
    .Mappings(...)  //set up mapping here
    .ExposeConfiguration(c => {
        // People advice not to use NHibernate.Cache.HashtableCacheProvider for production
        c.SetProperty("cache.provider_class", "NHibernate.Cache.HashtableCacheProvider");
        c.SetProperty("cache.use_second_level_cache", "true");
        c.SetProperty("cache.use_query_cache", "true");
    })
    .BuildSessionFactory();

SQL Profiler를 확인했으며 사용자를위한 시골 목록을 얻으면 한 번로드되며 모든 요청 후에 캐시 히트를받습니다. 좋은 점은 사용자 국가 이름을 표시 할 때 캐시에서로드되어 데이터베이스에 요청하지 않는다는 것입니다. 이 게시물에서 몇 가지 팁을 받았습니다 가브리엘 셰커. 도움이되기를 바랍니다. 더 나은/적절한 방법을 찾았다면 알려주세요. 감사!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top