Tôi đang kiểm tra v1.25 của Dapper với Sqlite thông qua System.Data.Sqlite. Nếu tôi chạy truy vấn này:Chuyển đổi số nguyên Dapper và đi xuống
var rowCount = dbc.Query<int>("SELECT COUNT(*) AS RowCount FROM Data").Single();
tôi nhận được lỗi sau: System.InvalidCastException: Specified cast is not valid
Điều này là do Sqlite trả về giá trị trên như một Int64, mà tôi có thể xác minh với đoạn mã sau. Điều này sẽ ném "Int64":
var row = dbc.Query("SELECT COUNT(*) AS RowCount FROM Data").Single();
Type t = row.RowCount.GetType();
throw new System.Exception(t.FullName);
Bây giờ, các mã sau đây thực sự sẽ xử lý việc chuyển đổi xuống từ Int64 để Int32:
public class QuerySummary
{
public int RecordCount { get; set; }
}
var qs = dbc.Query<QuerySummary>("SELECT COUNT(*) AS RecordCount FROM Data").Single();
rowCount = qs.RecordCount;
throw new System.Exception(rowCount.ToString());
Khi tôi ném ngoại lệ này, nó mang lại cho tôi số lượng hàng thực tế , cho biết rằng Dapper đã xử lý chuyển đổi cho tôi.
Câu hỏi của tôi là, tại sao dbc.Query<int>
không xử lý chuyển đổi xuống theo cách tương tự như dbc.Query<QuerySummary>
? Hành vi này có dự định không?
Marc, cảm ơn rất nhiều vì đã giải quyết nhanh quá. Tôi đã kiểm tra NuGet nhưng có vẻ như nó chưa có sẵn. Tôi sẽ lấy nó ra khỏi Github sau ngày hôm nay nếu tôi có chút thời gian để kiểm tra nó. Ngoài ra, tôi vui mừng báo cáo rằng một vấn đề tôi đã chuyển đổi nullable Int64 để Int32 tồn tại trong 1,13 đã biến mất trong 1,25. Công cụ tuyệt vời. – John
Chỉ cần một báo cáo nhanh chóng trở lại, tôi đã tải xuống bản dựng mới nhất từ Github và thử nghiệm nó trong một vài tình huống mà tôi đã làm việc. Nó hoạt động hoàn hảo, không còn ngoại lệ nữa. Cảm ơn một lần nữa. – John
@ John tốt để nghe, cảm ơn –