Cerințe: Când se folosește Dapper.Contrib pentru a executa metoda Insert, valoarea de returnare a unei singure date inserate pentru câmpul cheie primară auto-incrementant este valoarea după inserare, iar când valoarea returnată este mai mare de 2147483647, Dapper.Contrib va arunca excepția "Valoarea este prea mare sau prea mică pentru Int32".
Când folosești Dapper.Contrib pentru a introduce date, eroarea "Valoarea este prea mare sau prea mică pentru Int32" și baza de date a fost introdusă cu succes! am suspectat că este o problemă cu cadrul ORM, apoi am căutat pe GitHub și am descoperit că este o problemă cunoscută,Echipa Dapper nu a rezolvat problema pentru că se teme că va avea un impact prea mare, iar alți autori au oferit PR pentru Dapper, dar și aceasta a fost închisă, așa cum se arată în figura de mai jos:
Autentificarea cu hyperlink este vizibilă.
Motivul excepției este că, după obținerea auto-valorii adăugate, luând ca exemplu adaptorul SQL Server, distribuția este cast-ul într-o eroare de tip int, iar valoarea maximă a lui int este (int. MaxValue): 2147483647, așa cum se vede în figura de mai jos:
Pentru a reproduce metoda, creează un tabel nou, adaugă cheia primară începând de la 2147483648, iar scriptul SQL este următorul:
Referindu-vă la pachetul Dapper.Contrib, efectuați operația de inserare cu următorul cod:
Eroarea este următoarea:
soluție
Înlocuiește Dapper.Contrib cu pachetul Dapper.Contrib.Unofficial cu următoarea comandă:
Testul nu mai oferă eroare, așa cum se vede în figura următoare:
Sfat: Dapper.Contrib.Unofficial nu este testat complet, te rog să-l testezi tu înainte să-l folosești!
(Sfârșit)
|