2017-02-10 3 views
0

Mein team Objekt ist wie folgt und ich versuche, nur die Mitglieder mit einer select Anweisung zu erhalten. Das Problem, das ich habe, ist, dass ich die Ergebnisse bekomme, aber die Position geht verloren, weil es nicht auf mein POCO-Objekt abbildet, weil das Ergebnis "flach" ist.DocumentDb SELECT mit Unterobjekt

Mein team Objekt sieht wie folgt aus:

{ 
    id: 123, 
    name: "My Team", 
    members: [ 
    { 
     id: 789, 
     name: "John Smith", 
     position: 
     { 
      id: 444, 
      name: "Manager" 
     } 
    }, 
    { 
     id: 987, 
     name: "Jane Doe", 
     position: 
     { 
      id: 222, 
      name: "Director" 
     } 
    } 
    ] 
} 

Meine select Aussage wie folgt aussieht:

SELECT m.id, m.name, m.position.id as positionId, m.position.name as positionName 
FROM Teams t 
JOIN m IN t.members 
WHERE t.id = 123 

Also, wenn ich über die Select-Anweisung ausführen, ich bekommen, was ich unten zeigen und die Objektform eines Elements stimmt nicht mit meinem POCO-Objekt überein, sodass die Positionsinformationen verschwinden.

[ 
    { 
    id: 789, 
    name: "John Smith", 
    positionId: 444, 
    positionName: "Manager" 
    }, 
    { 
    id: 987, 
    name: "Jane Doe", 
    positionId: 222, 
    positionName: "Director" 
    } 

]

Mein C# Form der POCO-Objekt entspricht dem JSON-Objekt. Also habe ich ein Position-Objekt in meinem Member-Objekt.

Wie bekomme ich Mitglieder in der genauen Form, die sie in der Datenbank sind?

UPDATE: Ich änderte meine select Aussage zu den folgenden und es funktionierte gut. Es gibt mir jetzt automatisch die genaue Form meines POCO-Objekts.

Antwort

0

Ich denke, ich würde lieber ein einfaches DTO verwenden und es anschließend Ihrem POCO zuordnen (entweder manuell oder mit Auto-Mapper). Scheint sinnvoll, DB-gesteuertes Format von dem zu trennen, was Ihre App verwendet.

Eine andere Option wäre http://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm zu betrachten, aber ich finde es komplexer als eine spezialisierte DTO und ein Mapping.

+0

Ich verwende bereits DAO-Objekte und handle Mapping zwischen DAL und der Domäne. Ich lese immer DAO-Objekte von DocumentDb, so dass ich mir keine Gedanken darüber machen muss, ob die Formen richtig sind. Wie auch immer, ich habe die Lösung gefunden und den ursprünglichen Post aktualisiert. Es war eine offensichtliche Lösung. Ich weiß nicht, warum ich nicht früher daran gedacht habe. – Sam