我有一个存储过程,插入到表中然后执行此行

SET @returnVal = SCOPE_IDENTITY();


之后,我尝试了两种方法:

SELECT @returnVal




return @returnVal


当我从Microsoft SQL Server Management Studio执行存储过程时,通过SELECT @returnVal获得了预期的结果-选择了插入数据的标识列。

但是,当我将存储过程添加到ADO.Net实体数据模型/ EntityFramework类/ .edmx类并以C#代码执行存储过程时,我得到的返回值-1不会失败。

是否可以获得我想要的值,即新的标识值,返回了?

我意识到我可以将存储过程手动绑定到模型中表的插入操作-但这不是一个选择。每次我重新生成模型类时,都有太多的插入过程无法完成此手动工作。

最佳答案

在您的过程定义中声明参数的输出类型:

 create procedure [dbo].[Procedurename] @returnVal int output
 as
 SET @returnVal = SCOPE_IDENTITY();


在调用存储过程时,将其调用为:

 declare @returnVal int
 exec Procedurename @returnVal output
 print @returnVal

关于c# - Entity Framework 和SCOPE_IDENTITY,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18472065/

10-12 05:29