2017-07-27 74 views
0

我试图使用方法FromSql(...)dbcontext中获取输出值。实体框架核心使用FromSql方法(Linq)不能在存储过程中使用输出参数

如果我在SSMS上执行它,它可以工作,但不能在EF内核中工作。

我的SP PARAM:

@totalItems VARCHAR(MAX) OUTPUT 

我已经去除了其他params用于在读取并指出这一问题。记录即将到来,但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}); 
+0

数据库是使用VARCHAR而C#查询有BigInt有。 – jdweng

+0

即使我把'SqlDbType.VarChar'返回null。 – Robin

+0

尝试“string query =”替换“var query =” – Ashu

回答

0

我不”访问你的整个代码,但从来都没有得到对你可查询的源,直到你试图枚举它执行。所以,当你试图获得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 

这里是我如何做它:

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(); 
相关问题