Dapple mehrere Objekte aus einer Zeile

c# dapper

Frage

Ich habe eine Zeile aus der Datenbank

select "John" Name, 
       "Male" Gender,
       20 Age,
       "Rex" PetName,
       "Male" PetGender,
       5 PetAge
       // ... many more ...

Mit Dapper möchte ich diese Zeile in zwei Objekte ziehen:

class Person
{
    public string Name { get; set; }
    public string Gender { get; set; }
    public int Age { get; set; }
    // ... many more ...
}    
class Pet
{
    public string PetName { get; set; }
    public string PetGender { get; set; }
    public int PetAge { get; set; }
    // ... many more ...
}

Hinweis: Hier gibt es keine hierarchische Beziehung. Ich versuche lediglich, eine Datenbankzeile in zwei (oder mehr) Objekte zu mappen.

Wie kann ich dies mit Dapper tun?

  • Ich weiß, dass ich dies tun kann, indem ich ein dynamisches Objekt zurückschicke und jedes Objekt manuell abbilde, was schmerzhaft ist, da ich in meinem Szenario eine große Anzahl von Spalten habe. Ich würde das lieber nicht machen. (Und nein, es kann nicht neu entworfen werden, um weniger Spalten zu benötigen.)

Was ich versucht habe:

  • Ich habe QueryMultiple<Person,Pet> , QueryMultiple<Person,Pet> aber davon aus, dass ich mehrere Abfragen QueryMultiple<Person,Pet> . In meinem realen Szenario ist dies eine sehr teure Abfrage, und ich möchte es nur einmal ausführen.
  • Ich habe sah auch in der Rückkehr Query<Person,Pet,Tuple<Person,Pet>> , aber dies erfordert eine Id Spalte, hier gibt es keine hierearchical Beziehung oder Id s. Ich möchte nur eine einzelne Zeile nehmen und sie mehreren Spalten zuordnen.

Akzeptierte Antwort

Sie waren der Lösung mit der Query Methode ziemlich nahe. Wenn Sie keine haben Id Spalte, dann können Sie einen bieten splitOn Argument:

connection.Query<Person, Pet, Tuple<Person, Pet>>(sql, 
    (person, pet) => Tuple.Create(person, pet), splitOn: "PetName");


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum