Požiadavky: Pri použití Dapper.Contrib na vykonanie metódy Insert je návratová hodnota jedného vloženého dáta pre samozvyšujúce sa primárne kľúčové pole hodnota po vložení a keď je vrátená hodnota väčšia ako 2147483647, Dapper.Contrib vyhodí výnimku "Hodnota je príliš veľká alebo príliš malá pre Int32".
Pri použití Dapper.Contrib na vloženie dát sa objaví chyba "Hodnota je príliš veľká alebo príliš malá pre Int32" a databáza bola úspešne vložená! podozrieval som, že ide o problém s ORM frameworkom, potom som hľadal na GitHube a zistil som, že ide o známy problém,Tím Dapperu to neopravil, pretože sa obávajú, že by to mohlo mať príliš veľký dopad, a iní autori poskytli Dapperovi PR, ale aj to bolo zatvorené, ako je znázornené na obrázku nižšie:
Prihlásenie na hypertextový odkaz je viditeľné.
Dôvodom výnimky je, že po získaní vlastnej pridanej hodnoty, vezmúc napríklad SQL Server adaptér, sa castovanie prenesie na chybu typu int a maximálna hodnota int je (int. MaxValue): 2147483647, ako je znázornené na obrázku nižšie:
Na reprodukciu metódy vytvorte novú tabuľku, pridáte primárny kľúč začínajúci od 2147483648 a SQL skript je nasledovný:
Odkazujúc na balík Dapper.Contrib, vykonajte insert operáciu s nasledujúcim kódom:
Chyba je nasledovná:
riešenie
Nahradiť Dapper.Contrib balíkom Dapper.Contrib.Unofficial s nasledujúcim príkazom:
Test už neukazuje chybu, ako je znázornené na nasledujúcom obrázku:
Tip: Dapper.Contrib.Unofficial nie je úplne otestovaný, prosím, otestujte si ho sami pred použitím!
(Koniec)
|