Làm cách nào để thực hiện thao tác chèn vào cơ sở dữ liệu và trả về danh tính được chèn bằng Dapper?
Tôi đã thử một cái gì đó như thế này:
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();
Nhưng nó không hoạt động.
@Marc Gravell cảm ơn, đã trả lời. Tôi đã thử giải pháp của bạn, nhưng, vẫn có dấu vết ngoại lệ tương tự bên dưới
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
, hả? Có lẽ sử dụng mã gốc của bạn vàselect @id
? (điều này chỉ cần thêm một diễn viên). Tôi sẽ ghi chú để đảm bảo rằng nó hoạt động tự động trong các bản dựng dapper trong tương lai. Một lựa chọn khác cho bây giờ làselect cast(SCOPE_IDENTITY() as int)
- một lần nữa, một chút xấu xí. Tôi sẽ sửa nó.