Dapper error : Each grid can only be iterated once
dapper
Solution
The underlying data-reader is a forwards only device; by calling `Read` a second time, you move the reader forwards to the next grid. You should consume each grid in a forwards-only way. For example, you could re-order the statements:
using (var multi = mapperConnection.QueryMultiple("USP_FetchMarketRecords",
parameters, (SqlTransaction)null, 1000000, CommandType.StoredProcedure))
{
IEnumerable<MarketRecord.FItem> FItem =
multi.Read<MarketRecord.FItem>();
objCResponseVO.addObject("FItem",FItem);
IEnumerable<MarketRecord.FSubsystem> FSubsystem =
multi.Read<MarketRecord.FSubsystem>();
objCResponseVO.addObject("FSubsystem",FSubsystem);
}
Or you could buffer:
using (var multi = mapperConnection.QueryMultiple("USP_FetchMarketRecords",
parameters, (SqlTransaction)null, 1000000, CommandType.StoredProcedure))
{
IEnumerable<MarketRecord.FItem> FItem =
multi.Read<MarketRecord.FItem>().ToList();
IEnumerable<MarketRecord.FSubsystem> FSubsystem =
multi.Read<MarketRecord.FSubsystem>().ToList();
objCResponseVO.addObject("FItem",FItem);
objCResponseVO.addObject("FSubsystem",FSubsystem);
}
Problem
My code is as below ``` try { SqlConnection mapperConnection = SqlAccessHelper.SqlHelper.GetOpenConnection(SqlConnectionHelper.SqlConnectionString()); var parameters = new DynamicParameters(); parameters.Add("@P_MarketId", marketId, DbType.Int32); parameters.Add("@P_Output", dbType: DbType.Int32, direction: ParameterDirection.Output); using (var multi = mapperConnection.QueryMultiple("USP_FetchMarketRecords", parameters, (SqlTransaction)null, 1000000, CommandType.StoredProcedure)) { IEnumerable<MarketRecord.FItem> FItem = multi.Read<MarketRecord.FItem>(); IEnumerable<MarketRecord.FSubsystem> FSubsystem = multi.Read<MarketRecord.FSubsystem>(); objCResponseVO.addObject("FItem",FItem); objCResponseVO.addObject("FSubsystem",FSubsystem); } } catch (Exception ex) { throw ex; } ``` first read is fine . Second read of FSubsystem gives me the exception "Each grid can only be iterated once". whats wrong here ? When I traced it down in public IEnumerable Read() method during second read consumed property is true . How can i overcome from this.?