我的代码如下
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;
}
Run Code Online (Sandbox Code Playgroud)
第一次阅读就好了.第二次读取FSubsystem给我一个例外"每个网格只能迭代一次".什么错了?当我在公共IEnumerable Read()方法中追踪它时,第二次读取消耗属性为true.我怎样才能克服这一点?
底层数据读取器是仅前向设备; 通过Read第二次调用,您可以将阅读器向前移动到下一个网格.您应该以仅向前的方式使用每个网格.例如,您可以重新排序语句:
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);
}
Run Code Online (Sandbox Code Playgroud)
或者你可以缓冲:
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);
}
Run Code Online (Sandbox Code Playgroud)