从一行中精心设计多个对象
我有一行来自数据库
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 ... }
注意:这里没有层次关系,我只是试图将一个数据库行映射到两个(或更多)对象。
我怎么能用小巧玲珑呢?
- 我知道我可以通过返回动态并手动映射每个对象来实现这一点,这很痛苦,因为在我的场景中我们有大量的列。 我宁愿不这样做。 (不,它不能重新设计,需要更少的列。)
我尝试过的:
- 我查看了
QueryMultiple
,但它假设我正在运行多个查询。 在我的现实场景中,这是一个非常昂贵的查询,我想只运行一次。 - 我还研究了返回
Query<Person,Pet,Tuple>
,但这需要一个Id
列,这里没有hierearchical关系或Id
。 我只想取一行并将其映射到多列。
您使用Query
方法非常接近解决方案。 如果您没有Id
列,则可以提供splitOn
参数:
connection.Query>(sql, (person, pet) => Tuple.Create(person, pet), splitOn: "PetName");