我有一个存储过程,插入到表中然后执行此行
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/