Dapper генерирует исключение при втором запуске запроса, если схема результатов отличается

Я использую Dapper, Sqlite на C# coreclr.

public async Task<UserPoco> GetFromEmail(string email)
    {
        email = email.ToLower();

        using (var connection = new SqliteConnection(_configSettings.ConnectionString))
        {
            connection.Open();
            var query = $"SELECT * FROM users WHERE EmailAddress = '{email}';";
            var result = await connection.QueryAsync<UserPoco>(query);
            return result.FirstOrDefault();
        }
    }

Этот простой метод генерирует исключение, если в какой-то момент запрос SQL не находит результатов и при следующем запуске он находит результаты. Выдает: Невозможно привести объект типа "System.Int64" к типу "System.Int32". Ошибка при разборе столбца 0 (UserId=86 - Int64)

Я уверен, что это не связано с типами данных. UserPoco имеет длинное свойство UserId, а пользователи таблицы БД имеют UserId типа INTEGER, который рекомендуется для хранения bigint (long). Более того, например, если метод всегда находит данные, он будет работать как шарм. Я думаю, что это связано с тем фактом, что Dapper кэширует результирующую схему каждого запроса, который он выполняет, и выдает исключение, когда эта схема изменяется для того же запроса, на который они указывают: https://github.com/janjosephlim/dapper-dot-net/issues/124

Я не понимаю, почему я не могу найти больше информации об этом или больше людей жалуются на такой распространенный сценарий: я просто запускаю очень простой запрос несколько раз, который может возвращать или не давать результаты.

Что мне не хватает?

1 ответ

Я не знаю, почему sqlite неверно сообщает тип данных, но: проверки типов данных были улучшены в последних сборках перед выпуском. Пожалуйста, сверьтесь с последней предварительной версией: Я думаю, она уже исправлена.

Другие вопросы по тегам