在 Petapoco 或 Dapper 中处理不同数量的结果集?

Handling varying number of result sets in Petapoco or Dapper?

我以前使用 QueryMultiple 处理多个结果集,但我知道返回的结果集的确切数量。在这种情况下,当我使用 QueryMultiple 调用存储过程时,返回的结果集数量会发生变化。是否可以在 PetaPoco 或其他 orm(例如 Dapper)中处理此问题?

Dapper 的QueryMultiple方法returns一个GridReaderGridReader 有一个 .IsConsumed 属性,当您阅读了所有可用的结果集后,它应该更改为 true,这样可能会起作用:

using(var reader = conn.QueryMultiple(...)) {
    do {
        var data = reader.Read<...>().AsList();
        // ...
    } while(!reader.IsConsumed);
}

或者,Dapper 有一个只执行 "pack the parameters and invoke step" 的 ExecuteReader 方法和一个只公开 "materialize a row into an object" 代码的 GetTypeDeserializer 方法,因此您可以手动组合那些,即:

using(var reader = conn.ExecuteReader(...)) {
    do {
        var parser = SqlMapper.GetTypeDeserializer(...);
        while(reader.Read()) {
            var obj = parser(reader);
            // ...
        }
    } while(reader.NextResult());
}

(我对petapoco了解不多,sorry)