使用Dapper点网获取上次插入的ID [重复]

问题描述 投票:3回答:2

我正在使用Microsoft Visual Studio Express 2012 for Web开发MVC5应用程序。我想使用Dapper点网获取最后插入的ID。我在这里有解决方案,但它们正在SQL Server 2012(Management Studio)上工作,但是当我在代码中运行查询时,返回值是错误的。这是我已尝试获取最后插入的ID的代码段

SqlConnection _db = new SqlConnection("String");

        string query_1 = @"DECLARE @InsertedRows AS TABLE (user_id int);Insert into users (stuff) OUTPUT Inserted.user_id INTO @InsertedRows values(@stuff); SELECT user_id FROM @InsertedRows";
        string query_2 = @"Insert into users (stuff) OUTPUT Inserted.user_id values(@stuff);";
        string query_3 = @"Insert into users (stuff) values(@stuff); SELECT SCOPE_IDENTITY()";

        1. var id = _db.Query<int>(query_x, new { stuff = @stuff });
        2. var id = _db.Execute(query_x, new { stuff = @stuff });

但是两种情况下ID的值均为1,但不是实际结果。但是当我在SQL Management Studio上运行相同的查询时,一切正常。请帮助解决此问题。

sql-server asp.net-mvc visual-studio-2012 asp.net-mvc-5
2个回答
1
投票

好吧,我将回答自己的问题,在Dapper中进行其他搜索后,我们得到了扩展方法.Single(),该方法将返回新添加的Selected值的值,即]]

var id = _db.Query<int>(query_x, new { stuff = @stuff }).Single();

就我而言,它将返回新添加的主键值的值。我只是添加.Single()函数以获得新添加的值。


0
投票

我认为问题是您正在使用SCOPE_IDENTITY()(Docu在https://msdn.microsoft.com/en-us/library/ms190315.aspx:返回插入到标识列在同一范围内

© www.soinside.com 2019 - 2024. All rights reserved.