C# 实体框架核心输出参数在使用FromSql方法(Linq)的存储过程中不起作用

C# 实体框架核心输出参数在使用FromSql方法(Linq)的存储过程中不起作用,c#,sql,sql-server,linq,entity-framework-core,C#,Sql,Sql Server,Linq,Entity Framework Core,我正在尝试使用SQL(…)的方法从dbcontext获取输出值 如果我在SSMS上执行它,它可以工作,但在EF core中不工作 我的SP参数: @totalItems VARCHAR(MAX) OUTPUT 为了便于阅读,我删除了其他参数,并指出了问题所在。记录即将出现,但输出参数始终为null Linq IQeryable<T> = _context.Set<T>().FromSql("Sp_Todo @totalItems OUTPUT", // i als

我正在尝试使用SQL(…)的方法从
dbcontext
获取输出值

如果我在SSMS上执行它,它可以工作,但在EF core中不工作

我的SP参数:

  @totalItems VARCHAR(MAX) OUTPUT 
为了便于阅读,我删除了其他参数,并指出了问题所在。记录即将出现,但
输出
参数始终为
null

Linq

IQeryable<T> = _context.Set<T>().FromSql("Sp_Todo @totalItems OUTPUT", // i also tried with OUT or without both Out/Output but no luck
 new SqlParameter("@totalItems", SqlDbType.Varchar)
 { Direction = ParameterDirection.Output});
IQeryable=\u context.Set().FromSql(“Sp\u Todo@totalItems OUTPUT”//我也尝试了OUT或OUT/OUTPUT两者都没有,但运气不好
新的SqlParameter(“@totalItems”,SqlDbType.Varchar)
{Direction=ParameterDirection.Output});

我无法访问您的全部代码,但在您尝试枚举可查询源代码之前,不会对其执行任何操作。因此,当您试图获取输出时,它可能没有运行存储过程

要强制立即查询求值,可以执行以下操作:

 IQueryable<T> foo = _context.Set<T>().FromSql("Sp_Todo @totalItems OUTPUT", new SqlParameter("@totalItems", SqlDbType.Varchar) { Direction = ParameterDirection.Output });
 //totalItems output still null
 var bar = foo.ToList()
 //totalItems output not null anymore
IQueryable foo=_context.Set().FromSql(“Sp_Todo@totalItems OUTPUT”,new SqlParameter(@totalItems),SqlDbType.Varchar){Direction=ParameterDirection.OUTPUT});
//totalItems输出仍然为空
var bar=foo.ToList()
//totalItems输出不再为空
我是这样做的:

var _companyCode = new SqlParameter("CompanyCode", "HST");
var _sMsg = new SqlParameter("sMsg", "")
{
    Direction = ParameterDirection.Output,
    SqlDbType = SqlDbType.VarChar
};

var sql = "exec temp_get_company @CompanyCode, @sMsg OUTPUT";

var result = context.Set<Company>().FromSql(sql, _companyCode, _sMsg).ToList();

var yourOutput = _sMsg.Value.ToString();
var\u companyCode=新的SqlParameter(“companyCode”,“HST”);
var _sMsg=新的SqlParameter(“sMsg”,“”)
{
方向=参数方向。输出,
SqlDbType=SqlDbType.VarChar
};
var sql=“exec temp_get_company@CompanyCode,@sMsg OUTPUT”;
var result=context.Set().FromSql(sql,_companyCode,_sMsg).ToList();
var yourOutput=_sMsg.Value.ToString();

您的数据库正在使用VARCHAR,而c#查询具有BigInt。即使我放置
SqlDbType.VARCHAR
也会返回null。请尝试使用“string query=”代替“var query=”Ashu,因为查询不是字符串。它是
IQueryable
,您可以在
\u context.Set()
上看到它不是答案,但它应该是
IQueryable
,而不是
IQueryable
。此外,您还可以使用@在评论中提及人。例如,@Robin。