2016-03-27 11 views
0

Я использую 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

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

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

ответ

0

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