객체에 나열 할 다중 문자열, dapper

c# dapper mysql

문제

나는 Dapper 에게 새로운 사람이고, 사실 맵핑하는 방법을 고민하고 있습니다. 나는 다음과 같은 데이터베이스 구조를 가지고있다 :

calendar
| Id | Name |

meeting_room
| Id | Calendar_id | Capacity |

meeting_room_purpose
| id | Name | Description |

meeting_room_meeting_room_purpose
| id | room_id | purpose_id |

'캘린더'표는 계정과 매우 유사합니다. 여러 개의 회의실이 연결될 수 있습니다. 회의실에는 여러 가지 목적이있을 수 있습니다. 이는 내 질문의 곤경입니다. 나는 다음과 같은 객체를 가질 필요가있다.

class MeetingRoom {
     public string Name { get; set; }
     public int Capacity { get; set; }
     public List<string> Purpose { get; set; }
}

그래서 캘린더에서 주어진 룸에 대한 목적을 가진 모든 튜플의 용량과 목적 목록을 meeting_room이라는 이름으로 가져옵니다. 내 쿼리는 다음과 같습니다.

SELECT  
    calendar.id as CalendarId,
    calendar.name as name,
    meeting_room.capacity as capacity,
    purpose
FROM calendar
LEFT JOIN meeting_room ON meeting_room.calendar_id=calendar.id
INNER JOIN 
    (SELECT 
         meeting_room_purpose.name as purpose
     FROM
         meeting_room_purpose
     INNER JOIN meeting_room_meeting_room_purpose mrmrp ON
                meeting_room_purpose.id=mrmrp.purpose_id 
                AND mrmrp.room_id=@Id)
         a
     WHERE meeting_room.id=@Id    

이 질의의 출력은 터플의 집합이며, 목적에 따라 다르다.

| CalendarId |      name      | capacity |        purpose        |
      53         Charmander         6         Internal Meetings
      53         Charmander         6         Marketing Meetings 
      53         Charmander         6         Sales Meetings   

회의실 "Charmander"는 6 명으로 3 가지 용도로 사용할 수 있습니다. 다음과 같이 객체에 매핑되어야합니다 (간단한 생성자를 가졌음).

new MeetingRoom("Charmander", 6, new List<string>(){"Internal Meetings", "Marketing Meetings", "Sales Meetings"); 

내 멋진 쿼리는 다음과 같습니다.

_connection.Query<MeetingRoom, string, MeetingRoom>(sql, 
    (room, purpose) => { 
        room.Purpose = purpose; return room; 
    }, 
    new { Id = query.Id }, splitOn: "id, purpose").SingleOrDefault();

splitOn을 제거하면 예외가 발생하고 유지하면 빈 (null) 객체가 생깁니다. 나는 그것이 너무 어렵지 않다라고 확신한다, 나는 단지 나의 "eurika"순간을 얻는 것처럼 보일 수 없다.

친애하는

수락 된 답변

Dapper의 다중 매핑 기능은 실제로이 일대 다 스타일 매핑에 적합하지 않습니다. 이 SO 응답 은 방과 목적을 개별적으로로드 한 다음 나중에 코드에 결합하는 방법을 보여줍니다. QueryMultiple 예제는 하나의 데이터베이스 왕복과 비슷한 작업을 수행합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow