【问题标题】:C# Entity Framework is throwing an error on ExecuteFunctionC# 实体框架在 ExecuteFunction 上引发错误
【发布时间】:2019-04-29 12:10:06
【问题描述】:

快速更新,我一行一行的浏览,看到“函数评估需要所有线程运行”。

尝试使用 C# 中的实体框架执行存储过程。我已经成功地为存储过程中的SELECT 语句执行了此操作,但对于UPDATE 却没有那么多。

我已验证以下内容:

  • 存储过程在 SQL Server 中使用我手动输入的值运行
  • 存储过程需要 bigint 作为参数,因此输入以 INT64 格式发送。

我假设 EF 围绕存储过程构建的方法,通过除了它的 return 语句之外的所有部分,我得到一个相当普遍的无效异常错误。

对此有什么想法吗?我可以提供一点存储过程和方法上的一行:

 return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SP_HERE", int64, int64, int64, int64);
    }

这是存储过程:

CREATE PROCEDURE some_SP
    @var1 bigint,
    @var2 bigint,
    @var3 bigint,
    @var4 bigint 
AS
BEGIN
    --SET NOCOUNT ON;

然后是各种更新语句,这个我贴的是原来的create。

任何不经意间的提示都会有所帮助。不确定是什么原因造成的,深入研究异常似乎没有任何帮助。

谢谢大家!

【问题讨论】:

  • @Richard 我希望 :(。不过,如果您发现任何引用我的更新的内容,请告诉我 :)。
  • @MikeCMR - 您是否从存储的过程中返回任何内容? ExecuteFunction 返回一个 Int32....根据 MSDN 文档,当读取器和函数之间存在类型不匹配时,将引发 InvalidOperationException。想知道您是否返回的不是更新的行数?这可能是导致异常的原因吗?
  • @user1011627 很好的建议,但是不行。不返回任何东西。它可以返回一个看起来像的 int,也许行受到影响?但这不是我的目标。只需简单地对象 db.stored_procedure(values),像使用方法一样使用它。
  • 也许可以尝试返回@@ROWCOUNT,然后看看它是否有效……至少从故障排除的角度来看。

标签: c# sql-server entity-framework


【解决方案1】:

从存储过程返回@@ROWCOUNT。您遇到的问题很可能与从存储过程返回的类型与 ExecuteFunction 方法预期的返回值不匹配有关。

【讨论】:

  • 再次感谢!我将稍微挖掘一下,看看为什么@rows 真正解决了这个问题,如果我发现任何东西,我会更新。但很高兴它的工作。
  • YW...请做....我挖了一点看看是否能找到答案,但从未偶然发现真正的答案....不过肯定想知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2015-02-21
相关资源
最近更新 更多