C# 实体框架核心输出参数在使用FromSql方法(Linq)的存储过程中不起作用
我正在尝试使用SQL(…)的方法从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
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。