현재 내 Repo를 모든 목록으로 반환합니다. 내가 사람들을 결과를 수정하고 다른 SQL 요청 (nhibernate 사용하고 있습니다)로 고생하지 않을 수 있도록 이러한 IQueryable 변경하려면 찾고 있습니다.IQueryable <T> 질문
나는 그래서 다시 현재 결과를 얻을 후 현지 시간으로 시간을 변환 내 REPO
public List<CalendarAppointment> GetAppointment(Student student, DateTime start, DateTime end)
{
List<CalendarAppointment> appointments = session.Query<CalendarAppointment>().Where(x => x.Student.Id == student.Id
&& x.Start.Date >= start.Date && x.End.Date <= end.Date)
.Take(QueryLimits.Appointments).ToList();
return appointments.ConvertToLocalTime(student);
}
public static List<CalendarAppointment> ConvertToUtcTime(this List<CalendarAppointment> appointments, Student student)
{
if (student != null)
{
TimeZoneInfo info = TimeZoneInfo.FindSystemTimeZoneById(student.TimeZoneId);
foreach (var appointment in appointments)
{
appointment.Start = TimeZoneInfo.ConvertTimeToUtc(appointment.Start,info);
appointment.End = TimeZoneInfo.ConvertTimeToUtc(appointment.End,info);
}
}
return appointments;
}
에서 이런 일이 모든 사람에 인생을 더 쉽게 만드는하지만 질문이 있습니다. 이렇게하면 걱정할 필요가 없습니다.
IQueryable에서이 작업을 수행하면 어떻게됩니까? 그것은 어쨌든 가서 SQL을 트리거 할 것인가?
미스가 있다고 생각합니다. "모든 것"이라고 말하면 모든 컬렉션이 목록으로 반환되는 것은 아닙니다. 그것은 내가 데이터베이스에서 모든 단일 레코드를 반환하지 않습니다. 필요한 레코드 만 반환합니다. 내가 준 예제에서 일반적인 저장소를 사용하지 않습니다. 무슨 뜻인지는 모르겠다. 내가 그것을 테스트 할 곳이 있다면 그 방법과 Moq을 조롱하고 그 결과를 다시 돌려 줄 것이다. 엔티티에서 어떻게 보일 지 정교하게해야합니다. – chobo2
요점은 IQueryable을 저장소 메서드의 반환 결과로 노출해서는 안된다는 것입니다. http://stackoverflow.com/questions/7513681/mocking-out-nhibernate-queryover-with-moq/7518039#7518039 – Dmitry
흠. GetAppointmentInStudentTimeZone은 어떤 종류의 메소드인가요? Repo 메소드, 서비스 계층 메소드입니까? 나는 원래 그것을 가지고 있었기 때문에 당신이 시간대를 필요로 할 때 그것을 변환 할 수 있었지만, 이것은 ppl이 그렇게 많은 문제를 일으키거나 변환하지 않았거나 그들이 가지고 있던 시간대를 모른다.모든 시간대에 올바른 시간대가 필요하기 때문에 필요한 시간대처럼 나왔습니다. 그것이 필요하지 않은 경우에 매개 변수가 필요하지 않은 경우 다른 속성을 만들어서 EndTime 영역을 호출하고 get 메서드로 변환하는 LocalEndTime이라고 할 수 있습니다. – chobo2