我正在使用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上运行相同的查询时,一切正常。请帮助解决此问题。
好吧,我将回答自己的问题,在Dapper中进行其他搜索后,我们得到了扩展方法.Single()
,该方法将返回新添加的Selected值的值,即]]
var id = _db.Query<int>(query_x, new { stuff = @stuff }).Single();
就我而言,它将返回新添加的主键值的值。我只是添加
.Single()
函数以获得新添加的值。
我认为问题是您正在使用SCOPE_IDENTITY()(Docu在https://msdn.microsoft.com/en-us/library/ms190315.aspx:返回插入到标识列在同一范围内