简体   繁体   中英

Dapper multiple objects from one row

I have one row coming from the database

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

Using Dapper, I'd like to pull this row into two objects:

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: there is no hierarchical relationship here, I'm simply trying to map one database row into two (or more) objects.

How can I do this using dapper?

  • I know I can do this by returning a dynamic and mapping each object manually, which is painful as in my scenario we have a large number of columns. I'd rather not do this. (And no, it can't be redesigned to require less columns.)

What I've tried:

  • I've looked into QueryMultiple<Person,Pet> , but it assumes I am running multiple queries. In my real-life scenario, this is a very expensive query, and I'd like to just run it once.
  • I've also looked into returning Query<Person,Pet,Tuple<Person,Pet>> , but this requires an Id column, here there's no hierearchical relationship or Id s. I just want to take a single row and map it to multiple columns.

You were pretty close to solution with the Query method. If you don't have an Id column, then you can provide a splitOn argument:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM