我有一个Dapper.NET的QueryMultiple
方法的包装器方法。它可以成功地从一个存储过程中获取数据,该过程有三个查询,所有查询都是SELECT
查询。但是在获取数据后,我无法使用Read
或ReadAsync
将数据分配给类变量。以下是我的代码。
public Tuple<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>>
QueryMultiple<T1, T2, T3>()
{
try
{
var data = MultiQuery("[App].[USP_GetAllCategories]");
var category = data.Read<T1>();
var subcategory = data.Read<T2>();
var subSubcategory = data.Read<T3>();
return new Tuple<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>>(
category, subcategory, subSubcategory);
}
catch (Exception)
{
return null;
}
}
public SqlMapper.GridReader MultiQuery(string storedProcedureName)
{
using (var connection = LocalConnection())
{
try
{
return connection.QueryMultiple(
sql: storedProcedureName,
commandType: CommandType.StoredProcedure);
}
catch (Exception)
{
return null;
}
finally
{
CloseConnection(connection);
}
}
}
Read
之前,您正在释放连接。我不确定dapper是否立即加载数据,但无论如何,代码看起来都是错误的。实际上没有一个很好的理由去编写一个仅仅包装using
的方法。只需将using
块放在QueryMultiple
中即可。 - RobIDataReader
。 - Marc GravellGridReader
来读取数据。但是正如你所看到的,它似乎不起作用。我创建了MultiQuery
,这样其他开发人员就不需要知道如何查询,只需使用GridReader
获取数据。 - haider_kazal