【问题标题】:Entity framework core Output parameter not working in store procedure using FromSql method (Linq)实体框架核心输出参数在使用 FromSql 方法(Linq)的存储过程中不起作用
【发布时间】:2018-01-02 17:30:38
【问题描述】:

我正在尝试使用方法FromSql(...)dbcontext 获取输出值。

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

我的 SP 参数:

  @totalItems VARCHAR(MAX) OUTPUT 

为了便于阅读,我删除了其他参数并指出了问题所在。记录即将到来,但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});

【问题讨论】:

  • 您的数据库使用 VARCHAR,而 c# 查询使用 BigInt。
  • 即使我把SqlDbType.VarChar返回null。
  • 尝试用 "string query=" 代替 "var query="
  • Ashu 查询不是字符串。是IQeryable&lt;T&gt;你可以看_context.Set&lt;T&gt;()
  • 不是答案,但应该是IQueryable,而不是IQeryable。此外,您可以使用 @ 来提及 cmets 中的人。例如,@Robin。

标签: c# sql sql-server linq entity-framework-core


【解决方案1】:

我无权访问您的整个代码,但在您尝试枚举它之前,不会对您的可查询源执行任何操作。因此,当您尝试获取 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();

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2016-12-26
    相关资源
    最近更新 更多