我们最近构建了一个映射类,称为 TableMapperT,它封装了我们的 Dapper 多映射函数。我们将它与我们的“命令”对象分开构建,称为 TableCommand,它保存 sql 文本信息等。然而,为了使用它,我们必须使用“QueryMultiple”,这也是返回单个结果然后映射它所必需的。
我们已经运行了基本的性能指标,性能似乎与常规的 Query api 相同(使用相同的 multimap 循环相同的查询,但使用 'Read()' 的 QueryMultiple。
所以问题是,在对单个记录集使用 QueryMultiple 时,性能或行为是否存在根本劣势?似乎没有,但认为整个社区可能有更大的洞察力。
Sam Saffron 表示结果在这篇文章中没有缓冲(Dapper.NET 和存储的 proc 具有多个结果集)但那是不久前的事情,源代码看起来像 'buffered' 现在是真的(public IEnumerable Read(bool buffered =真)。
用法(如下)非常简洁,允许我们在一个地方争论连接和错误处理,这是我们在 IDatabase 对象上的“查询”扩展方法。
var command = new TableCommand(<SQL>,<Parameters>,<Timeout>);
var mapper = new TableMapper<OrderLineItem>(); //return type here
mapper.SetMap<OrderLineItem,Product>((oli,p)=>{oli.Product = p;return oli}); //input types here
return this.Database.Query(command,mapper);//returns IEnumerable<OrderLineItem>