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

Entity Framework Core 2中如何调用存储过程返回int数组/列表?

在Entity Framework Core 2中调用返回整数数组/列表的存储过程

当然可以实现!你遇到的问题是因为context.<entities>.FromSql()要求返回结果必须能完整映射到对应的实体类(包括所有非空字段),而你的存储过程只返回整数,和现有实体结构不匹配,所以才会报错。这里给你两个亲测有效的解决方案:

方案一:使用临时实体类映射结果

EF Core 2虽然不支持无实体直接查询,但可以定义一个极简的临时类来接收存储过程的返回值,具体步骤如下:

  1. 定义一个只包含整数属性的临时类:
public class IntResult
{
    // 属性名要和存储过程返回的列名对应,如果存储过程返回列名为Id,这里就叫Id
    public int Value { get; set; }
}
  1. 在你的DbContext中添加对应的DbSet(不需要为这个类创建数据库表,只是用来做查询映射):
public class YourDbContext : DbContext
{
    // 其他实体DbSet...
    public DbSet<IntResult> IntResults { get; set; }

    // 可选:如果不想让EF Core为这个类生成迁移,可在OnModelCreating里配置
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<IntResult>().HasNoKey(); // EF Core 2.1+支持,2.0版本可忽略此配置
    }
}
  1. 调用存储过程并提取整数列表:
var paramValue = "你的参数值";
var integerList = context.IntResults
    .FromSql("EXEC YourStoredProcedureName @Param = {0}", paramValue)
    .Select(result => result.Value)
    .ToList();

方案二:直接使用ADO.NET原生调用

如果不想定义临时类,也可以绕过EF Core的映射,直接用底层的ADO.NET来执行存储过程,这种方式更灵活:

var integerList = new List<int>();
var paramValue = "你的参数值";

using (var command = context.Database.GetDbConnection().CreateCommand())
{
    command.CommandText = "YourStoredProcedureName";
    command.CommandType = System.Data.CommandType.StoredProcedure;

    // 添加存储过程需要的参数
    var parameter = command.CreateParameter();
    parameter.ParameterName = "@Param";
    parameter.Value = paramValue;
    command.Parameters.Add(parameter);

    // 打开连接并执行读取
    context.Database.OpenConnection();
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            // 假设存储过程返回的第一列是整数,根据实际情况调整索引
            integerList.Add(reader.GetInt32(0));
        }
    }
}

这两种方法都能解决你的问题,如果你只是偶尔调用这类存储过程,方案二更轻便;如果经常用到,方案一的代码可读性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:51:39