c# - Entity Framework 和 SCOPE_IDENTITY

标签 c# sql-server entity-framework stored-procedures scope-identity

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

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/

相关文章:

c# - 如何配置 VS 只编译更改的代码

SQL Server - PK 删除性能不佳

sql-server - JDBC:从 Linux 机器通过 SSL 连接到 MS SQL DB

asp.net - 分层数据库选择/插入语句 (SQL Server)

c# - 为什么 Entity Framework 引用了一个根本不存在的列?

c# - 将 PopoverviewController 添加到 UIBarButtonItem Xamarin IOS

c# - 线程中的 powershell/runspace

entity-framework - 来自文件的 Entity Framework 核心种子大数据

asp.net-mvc - MVC 和 Entity Framework key

c# - OpenRasta 可以与现有的 Web 应用程序一起运行吗?