c# - 使用 LINQ toSQL 从存储过程返回新插入的行 ID

标签 c# sql-server linq stored-procedures

我有一个存储过程如下:

ALTER PROCEDURE [dbo].[Addworkshop]
    @title varchar(100),
    @time varchar(10),
    @date date,
    @mandatory int,
    @sid int
AS
BEGIN
    SET NOCOUNT ON;

    insert into Workshop(title, date, time, mandatory, sid)
    values(@title, @date, @time, @mandatory, @sid)

    declare @wid int
    set @wid = scope_identity()
    return @wid
END 

我在 ASP.NET MVC5 C# 中从我的操作方法中调用它:

public JsonResult addWorkshop(Workshop workshop)
{
        TLCWREntities context = new TLCWREntities();
        var wid = db.Addworkshop(workshop.title, workshop.time, workshop.date, workshop.mandatory, workshop.sid);
        return Json(wid);
}

此方法使用 JSON ajax 调用:

 $.ajax({

     type: 'POST',
     url: '@Url.Action("addWorkshop")', // we are calling json method

     dataType: 'json',

     data: $.toDictionary(wsData),


      success: function (wid) {
                        console.log("success add workshop wid: "+wid);

                    },
      error: function (ex) {
                        console.log("err add workshop");

                    }
                });

数据已成功插入到表中,当我在 SQL Server Management Studio 中执行存储过程时,它会返回正确的新插入行 ID。但是,当我使用 JSON ajax 和操作方法调用存储过程时,它总是返回 -1。

我正在使用 Visual Studio 2013 MVC5 C# 和 SQL Server Studio 2008

最佳答案

在@user2946329 的帮助下以及在 Google 上的一些搜索,我设法找到了答案。 1. 我像这样更改了我的存储过程:

insert into Workshop(title, date, time, mandatory, sid)
values(@title, @date, @time, @mandatory, @sid)
declare @wid int
set @wid = SCOPE_IDENTITY()
select @wid AS wid

我使用 select 语句而不是 return 返回最后插入的行 ID

  1. 在我的 Entity Framework 模型文件中,我从数据库更新了模型,然后从模型浏览器导航到 Function Imports,右键单击我的函数,然后编辑。我将返回值设置为标量 enter image description here

  2. 我右键单击受函数影响的模型并选择Stored Procedure Mapping enter image description here

我设置了 Result column binding 并将返回 id 与我的模型 View 的 id 绑定(bind) enter image description here

谢谢大家的帮助

关于c# - 使用 LINQ toSQL 从存储过程返回新插入的行 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35111528/

相关文章:

c# - 使用导航将 SQL Distinct、Count 和 GroupBy 转换为 Linq 查询

C# 使用 NPOI 库更改单元格的背景颜色

c# - 如果对象是 IDisposable 类的字段,我们是否应该将它们标记为只读

java - 登录 SQL Server 2012(64 位)时出现问题

sql-server - SQL Server - 查找服务器上所有数据库的用户/登录名的所有权限/访问权限

c# - 从 FilterQueryOption 获取 Linq 表达式抛出 CLR 异常

c# Lambda, LINQ ....改进这个方法

c# - WPF 和触摸 - 焦点问题

c# - 如何突出显示选定的html内容作为摘要c#,jquery,javascript,ajax

sql - 将 STRING_AGG 转换为 FOR XML 路径