내 DTO에는 내 데이터베이스에서 사용하는 ID가 있으며 대개 자동 증가 INT입니다. 내 응용 프로그램은 일반적으로이 ID 필드를 신경 쓰지 않으며 Name 속성으로 DTO를 조회하는 경향이 있습니다. 어떤 내 데이터 액세스 레이어에서이 방법을 굴복했습니다속성 이름 별 nHibernate Session.Load
이 내 DTO들의 대부분을로드하는 방법이기 때문에 내가 발견 한 것을 이제public T GetByName(string name)
{
return (T) Session
.CreateCriteria(typeof (T))
.Add(Expression.Eq("Name", name))
.UniqueResult();
}
는 nHibernate 수는 결과를 캐싱되지 않는 것입니다. SQL Profiler를 통해이 메소드를 호출 할 때마다 데이터베이스에 대한 왕복이 발생한다는 것을 알았습니다. 작업 단위 중에이 특정 객체를로드했는지는 확실합니다. HTTP 트랜잭션).
또한, 내가 읽은 바는 .Load()를 호출 할 때 nHibernate가 1 차 캐시에서 DTO를 캐싱한다는 것이다.
내 질문 :이 방법으로로드 된 후 첫 번째 수준의 캐시에 내 DTO를 넣으려면 nHibernate를 구성하는 방법이 있습니까? 아니면 데이터베이스 왕복을 줄이기위한 다른 방법을 찾아야합니까?
두 번째 수준 캐시에 캐시되는 내용은 두 번째 수준 캐시 구성을 통해 결정됩니다. 이 경우 실제로 쿼리를 실행하여 개체를 검색하므로 쿼리 결과 캐싱이 켜져 있어야합니다. –