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

.NET 6中如何从MySQL存储过程读取字符串列表?

从MySQL存储过程获取单列字符串结果(.NET 6)

方法一:修正Entity Framework Core的用法

你之前的问题大概率是无键实体的配置不完整,以下是正确的实现步骤:

  1. 定义匹配结果集的无键POCO类
    属性名需要和存储过程返回的列名完全匹配(MySQL默认大小写敏感,需根据库配置调整):
[Keyless]
public class StringResultItem
{
    // 替换为存储过程返回的实际列名
    public string ResultValue { get; set; }
}
  1. 在DbContext中正确注册无键实体
    确保显式配置无键特性,避免EF尝试匹配物理表:
public class AppDbContext : DbContext
{
    // 注册无键实体的DbSet
    public DbSet<StringResultItem> StringResults { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // 强制标记为无键实体,覆盖默认行为
        modelBuilder.Entity<StringResultItem>().HasNoKey();
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseMySQL("你的MySQL连接字符串");
    }
}
  1. 调用存储过程并转换结果
    使用FromSqlRaw执行存储过程,再通过Select提取字符串列:
using var context = new AppDbContext();
var stringList = await context.StringResults
    .FromSqlRaw("CALL my_stored_proc();")
    .Select(item => item.ResultValue)
    .ToListAsync();

注意:.NET 6和EF Core 6是完全兼容的,网上的不兼容说法是错误的,确保安装的MySql.EntityFrameworkCore版本为6.x系列(与.NET 6版本对应)。

方法二:直接使用MySqlConnector(绕过EF Core)

如果不需要EF的ORM能力,直接用原生MySQL客户端库更轻量高效:

  1. 安装NuGet包
    使用现代的MySqlConnector库替代旧版MySql.Data:
Install-Package MySqlConnector
  1. 编写执行代码
    直接连接数据库、执行存储过程并读取结果:
using MySqlConnector;

var connectionString = "你的MySQL连接字符串";
var resultList = new List<string>();

using var connection = new MySqlConnection(connectionString);
await connection.OpenAsync();

using var command = new MySqlCommand("CALL my_stored_proc();", connection);
using var reader = await command.ExecuteReaderAsync();

while (await reader.ReadAsync())
{
    // 读取结果集中的第一列(存储过程返回单列)
    resultList.Add(reader.GetString(0));
}

// resultList即为List<string>,可直接转为IEnumerable<string>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:24:13