2016-07-12 5 views
0

Ich bin ganz neu zu Dapper und ich versuche, meinen Kopf herum, wie es tatsächlich Karten Dinge. Ich habe die folgende Datenbankstruktur:Multi-Mapping-String zum Auflisten in Objekt, 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 | 

Die 'Kalender' Tabelle ist wie ein Konto. Es können mehrere Besprechungsräume zugeordnet sein. Ein Besprechungsraum kann mehrere Zwecke haben, was die Schwierigkeit meiner Frage ist. Ich brauche ein Objekt wie diese haben:

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

So aus dem Kalender, erhalte ich den Namen, meeting_room die Kapazität und die Liste der Zwecke aus allen Tupeln mit einem Ziel für den gegebenen Raum. Meine Abfrage ist wie folgt:

Die Ausgabe dieser Abfrage ist eine Reihe von Tupel, die sich nur in Zweck, z.

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

Also, der Tagungsraum „Charmander“, hat eine Kapazität von 6 Personen und kann für 3 Zwecke nutzen. Es sollte auf das Objekt kartieren (hatte es einen einfachen Konstruktor hatte):

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

Meine adrett Abfrage ist als:

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

Wenn ich splitOn entferne ich eine Ausnahme erhalten, und wenn ich es behalten Ich bekomme nur ein leeres (Null) Objekt. Ich bin mir sicher, dass es nicht so schwer ist, ich kann meinen "Eurika" -Moment einfach nicht bekommen.

Mit freundlichen Grüßen

Antwort

0

Dapper der multimapping Funktion ist nicht wirklich für diese One Viele Stilzuordnung entwickelt. This SO Answer zeigt eine Möglichkeit, die Räume und Zwecke separat zu laden und anschließend im Code zu verknüpfen. Das Beispiel QueryMultiple macht eine ähnliche Sache mit einem Datenbank-Roundtrip.

Verwandte Themen