SQL 쿼리 결과를 DTO에 매핑하는 것이 적절하게 정렬되지 않았습니다.

.net c# dapper sql

문제

안녕 주문한 방식으로 SQL 쿼리 결과에서 개체를 채우려고 노력하고 있습니다. 그러나, 내 문제는 쿼리 결과에서 채워지거나 채워지는 DTO 가 SQL 쿼리에서 주문한 방식대로 정렬되지 않는다는 것입니다.

가장 간단한 예를 들어, 데이터베이스에 5 명의 학생 기록이 있다고 가정 해 봅시다.

Select Id , Name, Age from Student Order by Name ASC 는 데이터베이스의 GetStudents 저장 프로 시저입니다.

그런 다음 실제로 매핑을 수행하는 코드라고 가정 해 보겠습니다.

    var queryResult= conn.GetStudents(); //this is just the conn that calls the stored procedure which is returned as a enumerable list

var myStudentRecord = new StudentsRecord{

        TotalRecord = queryResult.ToList().Count(),

        //this is not ordered according to the result from SP
        Students = queryResult.Select(result => new Student
                                     {
                                         Id = result.Id,
                                         Name = result.Name
                                         Age = result.Age
                                     }).ToList()
        }

내가 가지고있는 문제는 StudentsRecord.Students 입니다. 학생 객체의 StudentsRecord.Students 목록은 ASC 나 DESC에 의한 StoredProcedure 순서 변경과 관계없이 같은 순서 (이 경우 ASC )로 돌아옵니다.

StudentsRecord.Students

  1. 아담
  2. Arria
  3. 아시아
  4. 크루즈

DESC StudentsRecord.Students 로 저장 프로 시저를 변경하면 StudentsRecord.Students 주문이 동일하게 유지됩니다.

나는 여기서 내가 이해할 수 있기를 바란다.

정말로, 왜 이런 일이 일어나고 있는지 궁금합니다. 이 프레임 워크는 관련이 있습니까? 쿼리의 결과 집합은 기본적으로 ASC 또는 DESC의 순서가 다른 동일한 목록이며 분명히 관리 스튜디오에서 쿼리를 실행할 때 그에 따라 작동합니다. 그러나 객체에 매핑되면 결과의 순서가 목록에 반영되지 않습니다.

수락 된 답변

좋아요, 그래서 마침내이 질문에 대한 답을 얻었습니다 (그것은 인간의 실수였습니다 ^^) . 우리는 Dapper를 사용하고 Command Query 패턴 (CQRS)을 사용하도록 프로젝트를 설정합니다.

필자의 시나리오에서는 서버 쪽 페이징으로 datatable의 레거시 구현에서 확장하고 있습니다. 그래서 나는 두개의 추가 매개 변수 인 SortByOrderBy 를 받아들이도록 저장 프로 시저를 확장했다. 왜냐하면 데이터 테이블의 각 열은 ASC / DESC를 통해 정렬 될 수 있기 때문이다.

내 실수는 매개 변수가 SortByOrderBy 및 vv 값을 얻는 다른 방법으로 정의되었다는 것입니다. 어떤 문제가 발생했는지! 매핑은 실제로 그대로 작동합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.