2011-01-02 8 views
1

DB에서 nhibernate로 일부 데이터를 커밋합니다.DB에서 읽을 때 nhibernate 세션 문제가 발생했습니다.

TimeSlices newTimeSlices = new TimeSlices(timeSliceStartTime, timeSliceEndTime, schedule, newScheduleDay); 
         tsDao.Save(newTimeSlices); 
         tsDao.CommitChanges(); 

는하지만 나는이 데이터

public ScheduleDays GetByDate(DateTime date, Schedules schedule) 
     { 
      NHibernateSession.Refresh(schedule); 

      DateTime tmpDate = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0); 

      return NHibernateSession.CreateCriteria(typeof (ScheduleDays)) 
       .Add(Restrictions.Eq(ScheduleDaysProperties.Date.ToString(), tmpDate)) 
       .Add(Restrictions.Eq(ScheduleDaysProperties.Schedule.ToString(), schedule)) 
       .UniqueResult<ScheduleDays>(); 
     } 

하지만없는 성공을 읽어보십시오. 나는 DB를보고 거기에 있지만 DB에서 읽을 수 없습니다. 세션을 새로 고치려면 어떻게해야합니까? 저장 한 후에이 새로운 데이터를 읽을 수 있어야합니다. 문제는 아약스 구성 요소를 사용하여 작업 할 때만 발생합니다.

public ScheduleDaysMap() 
     { 
      Id(x => x.ScheduleDayId); 

      Map(x => x.Date) 
       .Not.Nullable(); 

      Map(x => x.MinutesOrderInterval) 
       .Not.Nullable(); 

      References(x => x.Schedule) 
       .Column(TableNames.ScheduleId) 
       .Not.Nullable() 
       .LazyLoad(); 

      HasMany(x => x.Orders) 
       .KeyColumn(TableNames.ScheduleDayId) 
       .Inverse() 
       .LazyLoad() 
       .AsBag(); 

      HasMany(x => x.TimeSlices) 
       .KeyColumn(TableNames.ScheduleDayId) 
       .Inverse() 
       .LazyLoad() 
       .AsBag(); 

      Version(x => x.Timestamp); 
     } 

timeSliceStartTime, timeSliceEndTime 및 newTimeSlices 형 외경 날짜 시간입니다

일정 DB 객체 유형 (표 스케줄)

newScheduleDay는 DB 객체 타입이다 (표 ScheduleDays)


I는 C# + 유창한 nhibernate를 사용하고 있습니다.

매핑 및 지연로드 또는 asbag에 문제가있을 수 있습니까? 또는 무엇이 잘못 될 수 있습니까?

답변

1

내가 여기에 문제를 알고 있지만하지 않는 내가 그것을 디버깅 할 방법입니다 :이 데이터베이스에 제대로 저장됩니다

  1. 확인하는 것이. 관계가 있는지 확인하십시오.
  2. SQL 출력을 here
  3. 으로 설정하십시오. 쿼리가 생성하는 SQL을 확인하십시오. SQL을 직접 실행 해보십시오.
  4. 직관을 사용하여 매핑 또는 쿼리를 변경하십시오.
  5. nHibernate.LINQ를 사용하여 다른 방식으로 쿼리를 작성해보십시오.

nHibernate는 you tell it to이 아닌 한 쿼리를 캐시하지 않습니다.

+1

+1 우수한 디버그 단계. 2 단계와 3 단계가 * 항상 * 유용하므로 SQL을 개발 중에 모든 프로젝트에 기본적으로 로깅 상태로 남겨 두었습니다. – Ragesh

+0

@Ragesh - 와우, 데이터베이스에 바이너리 BLOB를 푸시하는 경우주의하십시오. 실제로 이진 페이로드를 16 진수로 인코딩하고 로그합니다. – fostandy

+0

@fostandy, 좋은 지적입니다. 개인적으로 DB에서 얼룩을 멀리하기 위해 열심히 노력하면서 나는 그 문제에 결코 빠지지 않았습니다. 그리고 물론, 나는 로깅을 개발 중에 만 나타 냈습니다. – Ragesh

0

안녕하세요. nhibernate 프로파일 러를 실행하고 어떤 쿼리가 실행되는지 확인할 수 있습니까? 동일한 링크는 nhprof.com

Google은 nhprof를 사용하는 방법을 볼 매우 간단합니다. 도움이 되길 바랍니다.

관련 문제