我有一个存储过程,它插入表中然后执行此行
SET @returnVal = SCOPE_IDENTITY();
之后我尝试了两种方法:
SELECT @returnVal
和
return @returnVal
当我从 Microsoft SQL Server Management Studio 执行存储过程时,我使用 SELECT @returnVal
获得了预期结果 - 选择了插入数据的标识列。
但是,当我将存储过程添加到 ADO.Net 实体数据模型/EntityFramework 类/.edmx 类并在 C# 代码中执行该存储过程时,我会毫无失败地返回值 -1。
是否可以获得我想要的值,即返回的新身份值?
我意识到我可以手动将存储过程绑定(bind)到模型中表的插入操作 - 但这不是一个选项。每次重新生成模型类时,都有太多的插入过程无法完成这项手动工作。
最佳答案
在过程定义中声明参数的输出类型:
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/