Dapper로 데이터베이스에 삽입하고 삽입 된 ID를 어떻게 반환합니까?
나는 이와 같은 것을 시도했다 :
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
numeric
. 아마도 원래 코드를 사용select @id
합니까? (이것은 단지 캐스트를 추가합니다). 향후 dapper 빌드에서 이것이 자동으로 작동하도록 메모 할 것입니다. 현재 또 다른 옵션select cast(SCOPE_IDENTITY() as int)
은 약간 추악한 것입니다. 이 문제를 해결하겠습니다.