为了账号安全,请及时绑定邮箱和手机立即绑定

Dapper.NET和具有多个结果集的存储过程

/ 猿问

Dapper.NET和具有多个结果集的存储过程

哆啦的时光机 2019-11-14 15:37:46

有什么方法可以将Dapper.NET与返回多个结果集的存储过程一起使用?


就我而言,第一个结果集是单行单列;如果是,0则调用成功,第二个结果集将包含实际的数据行/列。(如果它不为零,则会发生错误,并且不会提供第二个结果集)


有机会用Dapper.NET处理吗?到目前为止,我只回过那首单曲0,但仅此而已。


更新:好的,只要结果集没有。2是单个实体:


Dapper.SqlMapper.GridReader reader = 

    _conn.QueryMultiple("sprocname", dynParams, 

    commandType: CommandType.StoredProcedure);


int status = reader.Read<int>().FirstOrDefault();

MyEntityType resultObj = reader.Read<MyEntityType>().FirstOrDefault();

现在,我还有另一个要求。


到目前为止,似乎还不支持Dapper针对第二个结果集的多重映射(将从SQL Server返回的单行拆分为两个单独的实体)(至少似乎不存在.Read<T>可以处理的重载)多重映射)。


如何将该行分为两个实体?


查看完整描述

3 回答

?
慕森王

您是否尝试过该QueryMultiple方法?它说应该:


执行一个返回多个结果集的命令,并依次访问每个结果集


您需要添加此using语句以启用QueryMultiple。


using Dapper; /* to add extended method QueryMultiple public static GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null); */


查看完整回答
反对 2019-11-14
?
茅侃侃

多个结果集。


var reader = conn.QueryMultiple("ProductSearch", param: new { CategoryID = 1, SubCategoryID = "", PageNumber = 1 }, commandType: CommandType.StoredProcedure);

var CategoryOneList = reader.Read<CategoryOne>().ToList();

var CategoryTwoList = reader.Read<CategoryTwo>().ToList();

您需要添加此using语句以启用QueryMultiple。


using Dapper; /* to add extended method QueryMultiple public static GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null); */

存储过程:


CREATE PROCEDURE [dbo].[ProductSearch]

    @CategoryID as varchar(20),

    @SubCategoryID as varchar(20),

    @PageNumber as varchar(20)

AS

BEGIN

    SELECT * FROM ProductTbl

    SELECT * FROM ProductTbl


查看完整回答
反对 2019-11-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信