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

.NET Core2.1升级至.NET6后DatabaseFacade ExecuteReader报错CS1739

.NET 6中DatabaseFacade执行原生SQL时ExecuteReader参数错误的解决方法

EF Core从2.x升级到6.x后,RelationalCommand.ExecuteReader的API签名发生了变更,原来的parameterValues命名参数已被移除,导致你的代码编译报错。

以下是适配.NET 6的修改后的代码:

public static RelationalDataReader ExecuteSqlQuery(this DatabaseFacade databaseFacade, string sql, params object[] parameters)
{
    var concurrencyDetector = databaseFacade.GetService<IConcurrencyDetector>();

    using (concurrencyDetector.EnterCriticalSection())
    {
        var rawSqlCommand = databaseFacade
            .GetService<IRawSqlCommandBuilder>()
            .Build(sql, parameters);

        var connection = databaseFacade.GetService<IRelationalConnection>();
        // 构建RelationalCommandParameterObject封装所需参数
        var parameterObject = new RelationalCommandParameterObject(
            connection,
            rawSqlCommand.ParameterValues,
            null,
            null,
            null);

        return rawSqlCommand.RelationalCommand.ExecuteReader(parameterObject);
    }
}

关键变更说明:

  • .NET 6的EF Core要求通过RelationalCommandParameterObject对象传递连接、参数值等执行上下文信息,不再支持单独传入parameterValues参数。
  • 创建RelationalCommandParameterObject实例时,传入数据库连接和参数值即可适配原有逻辑,其余可选参数(如事务、取消令牌等)可根据实际需求补充。

如果你的场景是查询实体类型,也可以直接使用EF Core 6提供的SqlQuery<T>扩展方法简化代码:

// 示例:查询返回指定实体类型的列表
var results = databaseFacade.SqlQuery<YourEntity>("SELECT * FROM YourTable WHERE Id = @p0", entityId).ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:30:43