유창한 nhibernate에서 엔티티와 관계에 대한 캐싱을 설정 하시겠습니까?
-
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를 확인했으며 사용자를위한 시골 목록을 얻으면 한 번로드되며 모든 요청 후에 캐시 히트를받습니다. 좋은 점은 사용자 국가 이름을 표시 할 때 캐시에서로드되어 데이터베이스에 요청하지 않는다는 것입니다. 이 게시물에서 몇 가지 팁을 받았습니다 가브리엘 셰커. 도움이되기를 바랍니다. 더 나은/적절한 방법을 찾았다면 알려주세요. 감사!
제휴하지 않습니다 StackOverflow