Dapper支持.NET DataSet吗?

10

我认为对于dapper.query对象,有一个datareader,对于dapper.Execute对象,有一个ExectureNonQuery对象。如果我错了,请纠正我。

我们能否使用dapper处理返回多个表的数据集?


我不确定我是否正确理解了你的问题,但如果你想从单个SQL命令中获取多个结果集,请查看QueryMultiple。Dapper网站上有一个例子。 - ssarabando
像其他ORM一样,使用ORM的整个重点是摆脱列/行口诀,而是使用适当的.NET对象。因此,我认为Dapper现在不支持数据集和数据表,也永远不会支持。 - marc_s
所以我说的是用于ADO.net的DataReader和ExecuteNonQuery。Dapper的网站在哪里?到目前为止,我只从各个地方获取关于Dapper的信息。 - user2688063
Dapper确实支持多表查询,但它不通过DataTable/DataSet来实现(如果需要的话:只需使用DataAdapter即可)。您是否特别想使用DataTable?或者您的主要意图只是“多个表格”? - Marc Gravell
不,我是想了解在使用Dapper时发生了什么,因为我对它的了解不多。谢谢你的回复。 - user2688063
2个回答

12

不,Dapper没有内置支持DataSet的功能,这主要是因为它看起来大多数情况下都是冗余的,而且这也不是dapper的目标。但这并不意味着它不包括用于处理选择多个结果的查询的API;请参见QueryMultiple

using (var multi = conn.QueryMultiple(sql, args))
{
    var ids = multi.Read<int>().ToList();
    var customers = multi.Read<Customer>().ToList();
    dynamic someOtherRow = multi.Read().Single();
    int qty = someOtherRow.Quantity, price = someOtherRow.Price;
}

请注意,由于 IDataReader 等的性质,此 API 仅支持顺序读取 - 基本上,每个 Read / Read<T> 等都会依次映射到下一个结果网格。


11

我可能晚了一步,但这是我将 IDataReader 转换为 DataSet 的方法。当我们使用 ExecuteReaderAsync 方法时,Dapper 返回一个 IDataReader。有关此添加的更多信息可以在这里这里找到。

以下是我的尝试:

public async Task<DataSet> GetUserInformationOnUserId(int UserId)
{
    var storedprocedure = "usp_getUserInformation";
    var param = new DynamicParameters();
    param.Add("@userId", UserId);
    var list = await SqlMapper.ExecuteReaderAsync(_connectionFactory.GetEpaperDBConnection, storedprocedure, param, commandType: CommandType.StoredProcedure);
    var dataset = ConvertDataReaderToDataSet(list);
    return dataset;
}

ConvertDataReaderToDataSet方法将接收IDataReader,您可以使用此方法将IDataReader转换为Dataset

public DataSet ConvertDataReaderToDataSet(IDataReader data)
{
    DataSet ds = new DataSet();
    int i = 0;
    while (!data.IsClosed)
    {
        ds.Tables.Add("Table" + (i + 1));
        ds.EnforceConstraints = false;
        ds.Tables[i].Load(data);
        i++;
    }                    
    return ds;
}

1
我在我的项目中使用了你的方法,谢谢。 - Hua Trung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接