Udostępnij za pośrednictwem


Optymistyczna współbieżność: omówienie

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:

Regulamin 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 dwóch lub więcej użytkowników jednocześnie próbuje przesłać konfliktujące wartości do jednej lub więcej kolumn wiersza.
Kontrolka współbieżności Technika używana do rozwiązywania konfliktów związanych ze współbieżnością.
optymistyczna kontrola współbieżności Technika, która najpierw sprawdza, czy inne transakcje zmieniły wartości w wierszu, zanim pozwoli na wprowadzenie 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ż uznaje, że szanse, iż jedna transakcja zakłóci drugą, są mało prawdopodobne.
Rozwiązywanie 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 członka, który wykrywa LINQ do 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 / Notatka

Tylko członkowie mapowane jako Always lub WhenChanged uczestniczą w optymistycznych kontrolach współbieżności. Nie przeprowadza się sprawdzania dla członków 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 User1 próbuje teraz przesłać zmiany, przesyłanie się nie udaje i zgłaszany jest wyjątek ChangeConflictException. 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.

Państwo Menedżer Asystent Dział
Stan oryginalny Alfredy Maria Sprzedaż
Użytkownik1 Alfred Promocja
Użytkownik2 Mary Usługa

Konflikty takie jak te można rozwiązać na różne sposoby. Aby uzyskać więcej informacji, zobacz Jak zarządzać konfliktami zmian.

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 przypisać określone działanie dla każdego rodzaju konfliktu każdemu członowi uwikłanemu w konflikt.

Typy LINQ do SQL, które obsługują wykrywanie i rozwiązywanie konfliktów

Klasy i funkcje do obsługi rozwiązywania konfliktów w optymistycznej współbieżności w LINQ to SQL obejmują następujące elementy:

Zobacz także