LinQ to SQL obsługuje optymistyczną kontrolę współbieżności. W poniższej tabeli opisano terminy dotyczące optymistycznej współbieżności w dokumentacji LINQ to SQL:
Terminy
opis
współbieżność
Sytuacja, w której co najmniej dwóch użytkowników jednocześnie próbuje zaktualizować ten sam wiersz bazy danych.
Konflikt współbieżności
Sytuacja, w której co najmniej dwóch użytkowników jednocześnie próbuje przesłać wartości powodujące konflikt do co najmniej jednej kolumny wiersza.
formant współbieżności
Technika używana do rozwiązywania konfliktów współbieżności.
optymistyczna kontrola współbieżności
Technika, która najpierw bada, czy inne transakcje zmieniły wartości w wierszu przed zezwoleniem na przesłania zmian.
Kontrast z pesymistyczną kontrolką współbieżności, która blokuje rekord, aby uniknąć konfliktów współbieżności.
Optymistyczna kontrola jest tak określana, ponieważ uważa, że szanse jednej transakcji zakłócają drugą na mało prawdopodobne.
Konfliktów
Proces odświeżania elementu powodującego konflikt przez ponowne wykonywanie zapytań względem bazy danych, a następnie uzgadnianie różnic.
Po odświeżeniu obiektu monitor zmian LINQ to SQL przechowuje następujące dane:
— wartości pochodzące z bazy danych i używane do sprawdzania aktualizacji. - Nowe wartości bazy danych z kolejnej kwerendy.
LINQ to SQL określa następnie, czy obiekt jest w konflikcie (czyli czy co najmniej jedna z jego wartości członkowskich uległa zmianie). Jeśli obiekt jest w konflikcie, LINQ to SQL następnie określa, które z jego elementów członkowskich są w konflikcie.
Każdy konflikt elementu członkowskiego, który odnajduje LINQ to SQL, jest dodawany do listy konfliktów.
W modelu obiektów LINQ to SQL występuje optymistyczny konflikt współbieżności, gdy oba następujące warunki są spełnione:
Klient próbuje przesłać zmiany do bazy danych.
Co najmniej jedna wartość sprawdzania aktualizacji została zaktualizowana w bazie danych od czasu ostatniego odczytania ich przez klienta.
Rozwiązanie tego konfliktu obejmuje wykrycie, które elementy członkowskie obiektu są w konflikcie, a następnie podjęcie decyzji o tym, co chcesz zrobić.
Uwaga
Tylko członkowie mapowane jako Always lub WhenChanged uczestniczą w optymistycznych kontrolach współbieżności. Nie wykonano sprawdzania dla elementów członkowskich oznaczonych jako Never. Aby uzyskać więcej informacji, zobacz UpdateCheck.
Przykład
Na przykład w poniższym scenariuszu użytkownik User1 rozpoczyna przygotowywanie aktualizacji, wysyłając zapytanie do bazy danych dla wiersza. Użytkownik User1 otrzymuje wiersz z wartościami Alfreds, Maria i Sales.
Użytkownik1 chce zmienić wartość kolumny Menedżer na Alfred i wartość kolumny Dział na Marketing. Zanim użytkownik User1 będzie mógł przesłać te zmiany, użytkownik User2 przesłał zmiany do bazy danych. Teraz wartość kolumny Asystent została zmieniona na Mary i wartość kolumny Department (Dział) na Service (Usługa).
Gdy użytkownik User1 próbuje teraz przesłać zmiany, przesyłanie kończy się niepowodzeniem i zgłaszany ChangeConflictException jest wyjątek. Ten wynik występuje, ponieważ wartości bazy danych dla kolumny Asystent i kolumny Dział nie są tymi, które były oczekiwane. Członkowie reprezentujący kolumny Asystent i Dział są w konflikcie. Poniższa tabela zawiera podsumowanie sytuacji.
Lista kontrolna wykrywania konfliktów i rozwiązywania problemów
Możesz wykrywać i rozwiązywać konflikty na dowolnym poziomie szczegółowości. W jednej skrajności można rozwiązać wszystkie konflikty na jeden z trzech sposobów (zobacz RefreshMode) bez dodatkowej uwagi. W drugiej skrajności można wyznaczyć określoną akcję dla każdego typu konfliktu na każdym elemencie członkowskim w konflikcie.
Określ lub popraw UpdateCheck opcje w modelu obiektów.
Dołącz do serii meetup, aby tworzyć skalowalne rozwiązania sztucznej inteligencji oparte na rzeczywistych przypadkach użycia z innymi deweloperami i ekspertami.
Usługa Azure Database for PostgreSQL to rozwiązanie relacyjnej bazy danych z wieloma użytkownikami. Możliwość obsługi wielu równoczesnych użytkowników umożliwia skalowanie baz danych PostgreSQL w poziomie i włączanie aplikacji, które obsługują wielu użytkowników i lokalizacje w tym samym czasie. Wzrost liczby użytkowników wiąże się z ryzykiem konfliktów. Z tego powodu ważne jest zrozumienie systemów współbieżności, które znajdują się w usłudze Azure Database for PostgreSQL w celu zarządzania współbieżnością