Câu hỏi này đã được bảo hiểm cho MSSQL ở đây:dàn diễn viên không hợp lệ khi trở về mysql LAST_INSERT_ID() sử dụng dapper.net
How do I perform an insert and return inserted identity with Dapper?
nhưng giải pháp này không làm việc với mysql.
Để cast LAST_INSERT_ID()
để nguyên với mysql bạn phải làm điều này:
SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER);
Các vết đống là:
Dapper.<QueryInternal>d__13`1.MoveNext() in sqlMapper.cs:607
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +159
System.Linq.Enumerable.ToList(IEnumerable`1 source) +36
Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in sqlMapper.cs:535
Có ai giải quyết vấn đề này trong MySQL?
EDIT:
tôi đã quản lý để thực hiện công việc này như sau:
var id = connection.Query<ulong>("SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER);").Single();
Có lẽ không lý tưởng, nhưng nó hoạt động.
Đã xảy ra sự cố tương tự. Đối với một số lý do nó sẽ không cast vào một int bằng cách sử dụng Dapper. Bạn phải sử dụng dài hơn, hạ cấp nó xuống một int trong .net: (Không biết nếu nó là một lỗi với Connector, MySQL, hoặc Dapper. – Sam
Chỉ cần có cùng một vấn đề và phát hiện ra rằng nó trả về ulong quá:) –
Bạn có thể cast càng lâu thay vì ulong và sau đó int. Một điều kỳ lạ khác mà tôi thấy là bit (1) cột được chuyển thành UInt64 (ulong). Nghi ngờ của tôi là người lái xe. –