You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework中如何处理存储过程返回的多结果集?

EF Core 读取存储过程多结果集实现方案

EF Core 原生的FromSqlRaw方法仅支持读取存储过程返回的第一个结果集,要获取多个结果集需要手动操作数据库连接和DataReader实现,具体代码如下:

// 第一个结果集存储集合
List<OhslotsMaster> ohslotsList = new List<OhslotsMaster>();
// 第二个结果集存储集合,替换为你实际业务对应的实体类
List<YourSecondEntity> secondResultList = new List<YourSecondEntity>();

// 复用上下文的数据库连接
using (var connection = context.Database.GetDbConnection())
{
    connection.Open();
    using (var command = connection.CreateCommand())
    {
        // 配置执行的存储过程和参数
        command.CommandText = @"EXEC SP_CreateHosts 
                                    @HostId,
                                    @ConfigId,
                                    @HostGivenName,
                                    @HostEmailAddress,
                                    @SurName,
                                    @DisplayName,
                                    @HostIsActive";
        // 直接使用你已经定义好的参数集合
        command.Parameters.AddRange(parms.ToArray());

        using (var reader = command.ExecuteReader())
        {
            // 读取第一个结果集
            ohslotsList = context.OhslotsMasters
                .Translate<OhslotsMaster>(reader)
                .ToList();
            
            // 跳转到第二个结果集
            if (reader.NextResult())
            {
                // 读取第二个结果集映射到对应实体
                secondResultList = context.Set<YourSecondEntity>()
                    .Translate<YourSecondEntity>(reader)
                    .ToList();
            }
        }
    }
}
// 之后两个集合就可以分别使用

注意事项

  • 请将代码中的YourSecondEntity替换为你第二个结果集对应的实体类,实体的属性名需要和存储过程返回的第二个结果集列名一一对应,列名和属性名不匹配的可以通过[Column]特性指定映射关系
  • 若你的第二个实体没有在DbContext中定义对应的DbSet<T>属性,也可以正常调用context.Set<YourSecondEntity>()进行转换,无需额外配置
  • 需要异步调用的场景下,将所有同步方法替换为对应异步版本即可:OpenAsync、ExecuteReaderAsync、NextResultAsync,并添加await关键字
  • 如果存储过程返回超过2个结果集,重复调用NextResult方法依次处理后续结果集即可

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:09:02