Wymagania: Podczas używania Dapper.Contrib do wykonania metody Insert, wartość zwrotu pojedynczego wstawionego podatku dla samoprzyrastających podstawowych klucza to wartość po wstawieniu, a gdy wartość zwrotu jest większa niż 2147483647, Dapper.Contrib wyrzuci wyjątek "Wartość jest zbyt duża lub zbyt mała dla Int32".
Podczas używania Dapper.Contrib do wstawiania danych pojawia się błąd "Wartość jest zbyt duża lub zbyt mała dla Int32", a baza danych została pomyślnie wstawiona! podejrzewałem, że to problem z frameworkiem ORM, więc szukałem na GitHubie i okazało się, że to znany problem,Zespół Dapper nie naprawił tego, ponieważ obawiają się, że będzie zbyt wpływowy, a inni autorzy zapewnili PR Dapperowi, ale projekt również został zamknięty, jak pokazano na poniższym rysunku:
Logowanie do linku jest widoczne.
Powodem tego wyjątku jest to, że po uzyskaniu wartości dodanej własnej, biorąc na przykład adapter SQL Server, cast jest rzucany na błąd typu int, a maksymalna wartość int to (int. MaxValue): 2147483647, jak pokazano na poniższym rysunku:
Aby odtworzyć metodę, należy utworzyć nową tabelę, dodać klucz główny zaczynający od 2147483648, a skrypt SQL wygląda następująco:
Korzystając z pakietu Dapper.Contrib, wykonaj operację wstawiania za pomocą następującego kodu:
Błąd wygląda następująco:
rozwiązanie
Zamień Dapper.Contrib na pakiet Dapper.Contrib.Unofficial następującym poleceniem:
Test nie daje już błędu, co pokazano na poniższym rysunku:
Wskazówka: Dapper.Contrib.Unofficial nie jest w pełni przetestowany, proszę przetestowaj go samodzielnie przed użyciem!
(Koniec)
|