0
我全都是Dapper的新手,我試圖讓我的頭腦知道它是如何映射事物的。我有以下數據庫結構:將多字符串字符串列入對象中,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 [email protected])
a
WHERE [email protected]
這個查詢的輸出是一組元組,它們只是用途不同,
| 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我得到一個異常,如果我把它我只是得到一個空的(空)對象。我相信這不是太難,我似乎無法得到我的「eurika」時刻。
問候