Dapper plusieurs objets d'une ligne

c# dapper

Question

J'ai une ligne provenant de la base de données

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

En utilisant Dapper, je voudrais tirer cette ligne dans deux objets:

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 ...
}

Note: il n'y a pas de relation hiérarchique ici, j'essaie simplement de mapper une ligne de base de données en deux (ou plus) objets.

Comment puis-je faire cela en utilisant dapper?

  • Je sais que je peux le faire en renvoyant une dynamique et en mappant chaque objet manuellement, ce qui est douloureux car dans mon scénario, nous avons un grand nombre de colonnes. Je préfère ne pas le faire. (Et non, il ne peut pas être repensé pour exiger moins de colonnes.)

Ce que j'ai essayé:

  • J'ai regardé QueryMultiple<Person,Pet> , mais cela suppose que je QueryMultiple<Person,Pet> plusieurs requêtes. Dans ma vie réelle, cette requête est très coûteuse et j'aimerais simplement l'exécuter une fois.
  • J'ai également examiné la Query<Person,Pet,Tuple<Person,Pet>> retourner Query<Person,Pet,Tuple<Person,Pet>> , mais cela nécessite une colonne Id , ici il n'y a pas de relation hiérarchique ou d' Id . Je veux juste prendre une seule ligne et la mapper sur plusieurs colonnes.

Réponse acceptée

Vous étiez assez proche de la solution avec la méthode Query . Si vous n'avez pas de colonne Id , vous pouvez fournir un argument splitOn :

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi