gpt4 book ai didi

c# - 多重映射字符串以在对象中列出,简洁

转载 作者:行者123 更新时间:2023-11-29 20:47:44 26 4
gpt4 key购买 nike

我是 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 |

“日历”表很像一个帐户。它可以有多个与之关联的 session 室。一间 session 室可以有多种用途,这就是我的问题的困境。我需要有一个像这样的对象:

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

因此,从日历中,我从具有给定房间用途的所有元组中获取名称、 session 室容量和用途列表。我的查询是这样的:

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” session 室可容纳 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)对象。我确信这不是太难,我只是似乎无法获得“ Eureka ”时刻。

最诚挚的问候

最佳答案

Dapper 的多重映射功能并不是真正为这种一对多样式映射而设计的。 This SO Answer展示了一种分别加载房间和用途然后将它们加入代码的方法。 QueryMultiple示例通过一次数据库往返执行类似的操作。

关于c# - 多重映射字符串以在对象中列出,简洁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38325793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com