16

我有一行来自数据库

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

使用 Dapper,我想将此行拉入两个对象:

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

注意:这里没有层次关系,我只是试图将一个数据库行映射到两个(或更多)对象。

我怎样才能使用 dapper 做到这一点?

  • 我知道我可以通过返回一个动态并手动映射每个对象来做到这一点,这很痛苦,因为在我的场景中我们有大量的列。我宁愿不这样做。(不,它不能被重新设计为需要更少的列。)

我试过的:

  • 我已经调查过了QueryMultiple<Person,Pet>,但它假设我正在运行多个查询。在我的现实生活场景中,这是一个非常昂贵的查询,我只想运行一次。
  • 我也研究过返回Query<Person,Pet,Tuple<Person,Pet>>,但这需要一个Id列,这里没有层次关系或Ids。我只想取一行并将其映射到多列。
4

1 回答 1

21

您非常接近该Query方法的解决方案。如果您没有Id列,则可以提供一个splitOn参数:

connection.Query<Person, Pet, Tuple<Person, Pet>>(sql, 
    (person, pet) => Tuple.Create(person, pet), splitOn: "PetName");
于 2013-07-19T21:07:56.580 回答