Я проверяю версию 1.25 Dapper с Sqlite через System.Data.Sqlite. Если я запускаю этот запрос:
var rowCount = dbc.Query<int>("SELECT COUNT(*) AS RowCount FROM Data").Single();
Я получаю следующую ошибку: System.InvalidCastException: Specified cast is not valid
Это связано с тем, что Sqlite возвращает приведенное выше значение как Int64, что я могу проверить с помощью следующего кода. Это вызовет "Int64":
var row = dbc.Query("SELECT COUNT(*) AS RowCount FROM Data").Single();
Type t = row.RowCount.GetType();
throw new System.Exception(t.FullName);
Теперь следующий код фактически обрабатывает нисходящее преобразование из 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());
Когда я выбрасываю это исключение, оно дает мне фактическое количество строк, указывая на то, что Dapper обработал преобразование для меня.
Мой вопрос: почему dbc.Query<int>
не обрабатывает преобразование вниз так же, как dbc.Query<QuerySummary>
? Это предполагаемое поведение?