从一行中对多个对象进行Dapper
本文关键字:对象 Dapper 一行 | 更新日期: 2023-09-27 18:24:03
我有一行来自数据库
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
列,这里没有层次关系或Id
s。我只想取一行并将其映射到多列
您非常接近Query
方法的解决方案。如果没有Id
列,则可以提供splitOn
参数:
connection.Query<Person, Pet, Tuple<Person, Pet>>(sql,
(person, pet) => Tuple.Create(person, pet), splitOn: "PetName");