我们最近构建了一个名为TableMapperT的映射类,它封装了我们的Dapper multimap func。我们从名为TableCommand的'command'对象中单独构建它,它包含sql文本信息等。但是为了使用它,我们必须使用'QueryMultiple',它也是返回单个结果然后映射它所必需的。
我们已经运行了基本的性能指标,其性能似乎与常规的查询API相同(使用相同的多重映射循环同一个查询,但使用'Read()'查询多个查询。
所以问题是,对于单个记录集使用QueryMultiple时,性能或行为是否存在根本缺点?似乎没有,但认为整个社区可能有更大的洞察力。
用法(下面)非常干净,允许我们在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>
答案 0 :(得分:3)
这里的问题不是表现,而是方便。大多数查询,IMO,是单个结果网格。更方便的是不必混淆多个网格阅读器场景的额外复杂性,这必然更复杂,因为每个网格可以是不同的形状,并且它们只能以特定顺序读取。
关注缓冲:
Read<T>
/ Query<T>
缓冲区该网格,但可以关闭以完全流式传输