5

我们最近构建了一个映射类,称为 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>
4

1 回答 1

3

这里的问题不是性能,而是方便。大多数查询,IMO,都是单一结果网格。不必弄乱多网格读取器场景的额外复杂性更方便,这必然更复杂,因为每个网格可以是不同的形状,并且它们只能按特定顺序读取。

关于缓冲:

  • Read<T>/默认情况下Query<T>缓冲该网格,尽管可以将其关闭以进行完全流式传输
  • 但是:multi-grid API 中的后续网格仅在被请求时才被访问- 因此需要依次使用 multi-grid API
于 2013-10-07T20:29:23.037 回答