使用SplitOn的“多级”映射Dapper

时间:2018-08-21 20:44:09

标签: c# dapper

大多数示例/问题只是介绍了使用split这样的映射“仅一个”查询级别的解决方案:

var sql = "SELECT P.Id, P.FirstName, P.LastName, " +
    "A.Id AS AddressId, A.StreetNumber, A.StreetName, A.City, A.State " +
    "FROM People P INNER JOIN Addresses A ON A.AddressId = P.AddressId; ";

db.Query<Person, Address, Person>( sql,  (person, address) => {
    person.Address = address;
    return person; }, splitOn: "AddressId" ).ToList();

我有一个类似这样的查询(仅作为示例):

Select * from Country C 
inner join State S 
on C.CountryId = S.CountryId 
inner join City Ct 
on S.StateId = Ct.StateId

如何使用dapper将其映射到我的模型/类?

1 个答案:

答案 0 :(得分:1)

Dapper或其扩展中没有满足您需求的现成解决方案。 Dapper分别映射结果集中的每一行。因此,您需要一些额外的映射才能执行所需的操作。获得多个Query的{​​{1}}的结果后,您可以手动进行操作。或使用一些映射工具。请考虑对this question进行各种回答。适应您的情况,解决方案(带有Slapper.Automapper映射)将是:

splitOn