Требования: При использовании Dapper.Contrib для выполнения метода Insert возвращаемое значение одного вставленного данных для самоувеличивающегося первичного ключа — это значение после вставки, и если возвращаемое значение превышает 2147483647, Dapper.Contrib выдаст исключение «Значение слишком велико или слишком мало для Int32».
При использовании Dapper.Contrib для вставки данных появляется ошибка «Значение слишком велико или слишком мало для Int32», и база данных успешно вставлена! подозревал, что проблема в фреймворке ORM, затем поискал на GitHub и обнаружил, что это известная проблема,Команда Dapper не исправила эту проблему, опасаясь, что это может оказать слишком большое влияние, а другие авторы уже предоставляли PR Dapper, но и сайт был закрыт, как показано на рисунке ниже:
Вход по гиперссылке виден.
Причина исключения в том, что после получения самодобавленного значения, например, адаптера SQL Server, каст пересчитывается на ошибку типа int, и максимальное значение int равно (int. MaxValue): 2147483647, как показано на рисунке ниже:
Чтобы воспроизвести метод, создайте новую таблицу, добавьте первичный ключ, начиная с 2147483648, и скрипт SQL выглядит следующим образом:
Ссылаясь на пакет Dapper.Contrib, выполните операцию вставки следующим кодом:
Ошибка следующая:
решение
Замените Dapper.Contrib на пакет Dapper.Contrib.Unofficial со следующей командой:
Тест больше не даёт ошибки, как показано на следующем рисунке:
Совет: Dapper.Contrib.Unofficial не полностью протестирован, пожалуйста, протестируйте его сами перед использованием!
(Конец)
|