Изисквания: При използване на Dapper.Contrib за изпълнение на метода Insert, връщащата стойност на един вмъкнат данни за самоувеличаващото се първично ключово поле е стойността след вмъкването, а когато връщаната стойност е по-голяма от 2147483647, Dapper.Contrib ще изхвърли изключението "Стойността е твърде голяма или твърде малка за Int32".
При използване на Dapper.Contrib за вмъкване на данни се появява грешка "Стойността е твърде голяма или твърде малка за Int32" и базата данни е успешно вмъкната! подозирах, че проблемът е в ORM framework, след което потърсих в GitHub и открих, че е известен проблем,Екипът на Dapper не го е оправил, защото се притеснява, че ще има твърде голямо въздействие, а други автори са предоставили PR на Dapper, но и той е затворен, както е показано на фигурата по-долу:
Входът към хиперлинк е видим.
Причината за изключението е, че след получаване на самодобавената стойност, като вземем SQL Server адаптера като пример, кастът се предава към int тип грешка, а максималната стойност на int е (int. MaxValue): 2147483647, както е показано на фигурата по-долу:
За да възпроизведеш метода, създай нова таблица, добави първичния ключ, започвайки от 2147483648, и SQL скриптът е следният:
Позовавайки се на пакета Dapper.Contrib, изпълнете операцията за вмъкване със следния код:
Грешката е следната:
решение
Заменете Dapper.Contrib с пакета Dapper.Contrib.Unofficial със следната команда:
Тестът вече не дава грешка, както е показано на следващата фигура:
Съвет: Dapper.Contrib.Unofficial не е напълно тестван, моля, тествайте го сами преди да го използвате!
(Край)
|