如何执行插入数据库并使用 Dapper 返回插入的身份?
我试过这样的事情:
string sql = "DECLARE @ID int; " + "INSERT INTO [MyTable] ([Stuff]) VALUES (@Stuff); " + "SELECT @ID = SCOPE_IDENTITY()"; var id = connection.Query<int>(sql, new { Stuff = mystuff}).First();
但它没有用。
@Marc Gravell 谢谢您的回复。我已经尝试过您的解决方案,但是下面仍然是相同的异常跟踪
System.InvalidCastException: Specified cast is not valid at Dapper.SqlMapper.<QueryInternal>d__a`1.MoveNext() in (snip)\Dapper\SqlMapper.cs:line 610 at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in (snip)\Dapper\SqlMapper.cs:line 538 at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param) in (snip)\Dapper\SqlMapper.cs:line 456
如果您使用 ,它确实 支持 输入/输出参数(包括RETURN值)DynamicParameters,但在这种情况下,更简单的选项很简单:
RETURN
DynamicParameters
var id = connection.QuerySingle<int>( @" INSERT INTO [MyTable] ([Stuff]) VALUES (@Stuff); SELECT CAST(SCOPE_IDENTITY() as int)", new { Stuff = mystuff});
请注意,在较新版本的 SQL Server (2005+) 上,您可以使用以下OUTPUT子句:
OUTPUT
var id = connection.QuerySingle<int>( @" INSERT INTO [MyTable] ([Stuff]) OUTPUT INSERTED.Id VALUES (@Stuff);", new { Stuff = mystuff});