首页 > 解决方案 > 使用 Split-on 和 Query Multiple 在 dapper 中映射多个对象

问题描述

考虑角色-员工-地址

一个员工只能有一个角色,但可以有多个地址。所以使用 split on 效率不高,因为我们可能会得到角色和员工的重复。我们可以使用查询多个,但我觉得如果有一种方法可以将角色和员工一起捕获到一个结果中并在另一个结果中处理,那会更好。

在这种情况下,我们可以直接在一个查询中加入并在映射时拆分某个列,而不是分别返回角色和员工。

我期待这样的事情

string query = "StoredProcedure";

using (var multi = connection.QueryMultiple(query, null))
{
    empRole = multi.Read<Employee,Role>().Single().SplitOn("Id");
    add = multi.Read<Address>().ToList();
}    

有什么方法可以同时使用这两种技术吗?

标签: dapper

解决方案


正确,您需要 Dapper 本身不支持的一对多映射,但如果您使用的数据库支持 JSON,则可以轻松实现。这是我写的一篇文章(连同工作示例),展示了如何使用 SQL Server / Azure SQL 来完成它:

https://medium.com/dapper-net/one-to-many-mapping-with-dapper-55ae6a65cfd4


推荐阅读