Entity Framework, Unique Columns, Handle Exception

0

Witam. Mam takie pytanie odnośnie dodawania rekordu do bazy w aplikacji webowej. Powiedzmy, że jest aplikacja z której korzysta wielu użytkowników. Każdy może utworzyć nowy wpis w bazie danych (jedna konkretna tabela) która zawiera m.in pola Nr oraz Rok. Te dwa pola są oznaczone jako

[Index("IX_FirstAndSecond", 1, IsUnique = true)]
public int Nr { get; set; }

[Index("IX_FirstAndSecond", 2, IsUnique = true)]
public int Rok { get; set; }

Czyli mamy unikalny zestaw Nr Rok.
Jak użytkownik kliknie aby utworzyć nowy wpis system najpierw pobiera z bazy ostatni numer w danym roku, zwiększa go o 1 i dodaje nowy rekord.
Teraz pytanie jak się zabezpieczyć przed sytuacją gdzie dwóch lub więcej userów dokładnie w tym samym czasie dodaje wpisy i dokładnie w tym samym czasie odczytują ostatnie wartości z bazy (wiem prawdopodobieństwo, że odpytują bazę dokładnie w tej samej ms jest małe) i powiedzmy, że system nada te same numery. Pierwszy zapisze się do bazy ale na kolejnym poleci Exception.
I przydało by się to jakoś obsłużyć bez zwracania userowi komunikatu tylko dać numer wyżej. Stosuje się w ogóle takie rozwiązania czy nie potrzebnie się tym przejmuje ? W przypadku rejestracji użytkownika jest łatwiej, bo można zwrócić komunikat, że login zajęty. Ale w przypadku generowania numeru przez system już nie bardzo.

0

jak dostaniesz unique violation to przeprowadź procedurę raz jeszcze albo do skutku i tyle

0

Skorzystaj z sekwencji do uzyskania numeru. Sekwencje w EF są obsługiwane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1