首页 > 解决方案 > 没有子查询的 Dapper 中的复杂映射

问题描述

如果我有一个像

class Thing
{
 public string A { get; set; }
 public string B { get; set; }
 public string C { get; set; }
 public string D { get; set; }
}

Dapper 非常适用于:

return conn.QuerySingle<Thing>(
    @"SELECT A, B, C, D
      FROM [Thing] WHERE Id = @id", new { id });

但是如果我的班级结构是

class Thing
{
 public string A { get; set; }
 public string B { get; set; }
 public IEnumerable<Stuff> { get; set; }
}

class Stuff
{
 public string C { get; set; }
 public string D { get; set; }
}

我怎样才能让 Dapper 映射到该结构,假设 Enumerable 将始终在 Enumerable 中包含 1 个项目,所以实际上我只是以不同的方式表示相同的数据。

我见过的 Dapper 教程非常复杂并且包含子查询,但理想情况下我的查询不应该更改,因为它已经返回了应该映射到新结构的所有数据。

有任何想法吗?

标签: c#sqldapper

解决方案


您必须创建自己的自定义类型映射器。我在这里写了一篇文章和一些示例:

https://medium.com/dapper-net/custom-type-handling-4b447b97c620


推荐阅读