小巧玲珑QueryMultiple存储过程W/O映射到对象

小巧玲珑QueryMultiple存储过程W/O映射到对象

问题描述:

凭借短小精悍,我可以做批处理执行存储过程,类似于:小巧玲珑QueryMultiple存储过程W/O映射到对象

connection.Execute(@" 
    exec sp1 @i = @one, @y = @two 
    exec sp2 @i = @three", 
    new { one = 1, two = 2, three = 3 }); 

然而,检索数据的唯一手段,我已经看到到现在是通过使用

results.Read<Type>() 

如果结果不映射到对象会怎么样?例如,我正在写“通用”代码来执行任何带有变量输入/输出参数&结果集的SP。

谢谢

你想要什么API?如果你可以单独处理网格:这样做:

using(var multi = connection.QueryMultiple(...)) 
{ 
    while(!multi.IsConsumed) { 
     // ... 
    } 
} 

其中...访问:

  • Read()dynamic行 - IDictionary<string,object>
  • Read<T>()的类型化提的是,各行也实现通过仿制药排
  • Read(Type)对于没有仿制药的打字行
  • Read<DapperRow>()(实际上,这仅仅是TRead<T>()用来实现Read(),但也许更方便),它提供了元数据

如果你要下降到原始IDataReader稍微访问,请即:

using(var reader = connection.ExecuteReader(...)) { 
    // whatever you want 
} 

至于参数:DynamicParameters类提供给参数控制更加丰富的机会,包括参数方向等

+0

所以每.Read()返回单个网格结果,因为“exec”的顺序已发送,对吗?此外,当您说.ExecuteReader时,这是由Dapper提供的扩展方法,它提供原始访问,类似于ADO.NET中的DataReader?最后,一个问题DP可以同时用于QueryMultiple和ExecuteReader?顺便说一下,我在Dapper上观看了Pluralsight的视频,看起来非常好。 – Bill 2014-09-02 12:21:26

+0

“是”(实际上,它是按照执行的“select”顺序进行的 - 它看不到任何其他内容),“是”和“是” – 2014-09-02 12:30:50

+0

还有一个问题,如果我是使用QueryMultiple和DynamicParameters,我可以将sql作为多个存储过程调用传递,并用“;”分隔,然后为所有SP提供一个包含所有参数的DynamicParameter对象?谢谢 – Bill 2014-09-13 06:52:45