Я использую Dapper, Sqlite на C# coreclr.Dapper исключает второй раз, когда вы запускаете запрос, если другая схема результатов
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). Более того, например, если метод всегда находит данные, он будет работать как шарм. Я думаю, что это связано с тем, что Щеголеватый кэширует результат схемы каждого запроса он работает и генерирует исключение, когда эта схема изменения для того же самого запроса, как они указывают на: https://github.com/janjosephlim/dapper-dot-net/issues/124
Что я не понимаю почему я не могу найти больше информации об этом или более людей, жалуется на такой распространенный сценарий: я просто выполняю очень простой запрос несколько раз, что может вернуть результаты или нет.
Что мне не хватает?