【发布时间】: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