Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Określ lub popraw UpdateCheck opcje w modelu obiektu.
Aby uzyskać więcej informacji, zobacz Jak określić, którzy członkowie są testowani w celu wykrywania konfliktów współbieżności.
W bloku try/catch wywołania metody SubmitChanges, określ, w jakim momencie mają zostać zgłoszone wyjątki.
Aby uzyskać więcej informacji, zobacz Instrukcje: określanie, kiedy wyjątki współbieżności są zgłaszane.
Określ, ile szczegółów konfliktu chcesz pobrać, i umieść kod w bloku try/catch stosownie do tego.
Aby uzyskać więcej informacji, zobacz Instrukcje: pobieranie informacji o konflikcie jednostki (Instrukcje: pobieranie informacji o konflikcie członka).
Uwzględnij w
try
/catch
kodzie sposób rozwiązywania różnych wykrytych konfliktów.Aby uzyskać więcej informacji, zobacz Jak rozwiązywać konflikty przez zachowanie wartości bazy danych, Jak rozwiązywać konflikty przez zastępowanie wartości bazodanowych, i Jak rozwiązywać konflikty przez scalanie z wartościami bazy danych.
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: