Closed witmus closed 2 years ago
W przypadku ostatniego punktu, nie jestem pewny, czy nie powinno zwrócić błędu walidacji modelu. Co prawda domyślnie BankReport.Id
przyjmuje wartość 0
, więc pewnie system dostająć NULL
podmienia na domyślną.
Co do dwóch pierwszych punktów -
api/bank/reports
?Co do ostatniego punktu faktycznie popełniłem błąd. Dla id
= NULL
rzeczywiście zwracany jest błąd walidacji. Opisana przeze mnie sytuacja występuje dla id
= 0
lub gdy pole id
nie jest zawarte w ciele żądania i w konsekwencji przyjmuje wartość domyślną.
Dorzucam dodatkowe sprawdzanie, czy raport o podanym Id istnieje, rozwiąże to problem braku id w requeście oraz id = 0
.
Błąd The instance of entity type 'BankReport' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.
również został poprawiony.
Endpoint PUT
/api/bank/reports
, w zależności od wartości polaid
w ciele żądania, wykazuje błędne zachowania:dla
id
równego wartości identyfikatora istniejącego raportu rzucany jest wyjątek z następującą informacją:The instance of entity type 'BankReport' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.
dla
id
o wartości nieprzypisanej do żadnego raportu rzucany jest wyjątek z następującą informacją:The database operation was expected to affect 1 row(s), but actually affected 0 row(s); data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.
dla
id
=NULL
tworzony jest nowy raport, a endpoint zwraca wartośćTRUE