Share via


Optimistische gelijktijdigheid: overzicht

LINQ naar SQL ondersteunt optimistisch gelijktijdigheidsbeheer. In de volgende tabel worden termen beschreven die van toepassing zijn op optimistische gelijktijdigheid in LINQ naar SQL-documentatie:

Voorwaarden Beschrijving
Concurrency De situatie waarin twee of meer gebruikers tegelijkertijd proberen dezelfde databaserij bij te werken.
Gelijktijdigheidsconflict De situatie waarin twee of meer gebruikers tegelijkertijd proberen conflicterende waarden te verzenden naar een of meer kolommen van een rij.
Gelijktijdigheidsbeheer De techniek die wordt gebruikt om gelijktijdigheidsconflicten op te lossen.
optimistisch gelijktijdigheidsbeheer De techniek die eerst onderzoekt of andere transacties waarden in een rij hebben gewijzigd voordat wijzigingen kunnen worden verzonden.

Contrast met pessimistisch gelijktijdigheidsbeheer, waarmee de record wordt vergrendeld om gelijktijdigheidsconflicten te voorkomen.

Optimistische controle wordt zo aangeduid omdat de kans dat een transactie de kans op een transactie verstoort, onwaarschijnlijk is.
Conflictoplossing Het proces van het vernieuwen van een conflicterend item door opnieuw een query uit te voeren op de database en vervolgens de verschillen te combineren.

Wanneer een object wordt vernieuwd, bevat de LINQ naar SQL-wijzigingstracker de volgende gegevens:

- De waarden die oorspronkelijk uit de database zijn gehaald en worden gebruikt voor de updatecontrole.
- De nieuwe databasewaarden uit de volgende query.

LINQ naar SQL bepaalt vervolgens of het object conflicteert (dat wil gezegd, of een of meer van de lidwaarden zijn gewijzigd). Als het object conflicteert, bepaalt LINQ naar SQL vervolgens welke van de leden in conflict zijn.

Elk lidconflict dat LINQ naar SQL detecteert, wordt toegevoegd aan een conflictlijst.

In het OBJECTmodel LINQ naar SQL treedt een optimistisch gelijktijdigheidsconflict op wanneer aan beide van de volgende voorwaarden wordt voldaan:

  • De client probeert wijzigingen in de database in te dienen.

  • Een of meer waarden voor updatecontrole zijn bijgewerkt in de database sinds de client ze voor het laatst heeft gelezen.

Oplossing van dit conflict omvat het detecteren van welke leden van het object conflicteren en vervolgens beslissen wat u eraan wilt doen.

Notitie

Alleen leden die zijn toegewezen als Always of WhenChanged deelnemen aan optimistische gelijktijdigheidscontroles. Er wordt geen controle uitgevoerd voor leden die zijn gemarkeerd Never. Zie UpdateCheck voor meer informatie.

Opmerking

In het volgende scenario begint Gebruiker1 bijvoorbeeld met het voorbereiden van een update door een query uit te voeren op de database voor een rij. Gebruiker1 ontvangt een rij met waarden van Alfreds, Maria en Sales.

Gebruiker1 wil de waarde van de kolom Manager wijzigen in Alfred en de waarde van de kolom Afdeling in Marketing. Voordat Gebruiker1 deze wijzigingen kan indienen, heeft User2 wijzigingen naar de database verzonden. Nu is de waarde van de kolom Assistent gewijzigd in Mary en de waarde van de kolom Afdeling in Service.

Wanneer Gebruiker1 nu probeert wijzigingen in te dienen, mislukt de inzending en wordt er een ChangeConflictException uitzondering gegenereerd. Dit resultaat treedt op omdat de databasewaarden voor de kolom Assistent en de kolom Afdeling niet de waarden zijn die werden verwacht. Leden die de kolommen Assistent en Afdeling vertegenwoordigen, zijn in conflict. De volgende tabel bevat een overzicht van de situatie.

Provincie Manager Assistent Afdeling
Oorspronkelijke staat Alfreds Maria Verkoop
User1 Alfred Marketing
User2 Mary Service

U kunt conflicten zoals deze op verschillende manieren oplossen. Zie Voor meer informatie : Wijzigingsconflicten beheren.

Controlelijst voor conflictdetectie en -oplossing

U kunt conflicten op elk detailniveau detecteren en oplossen. Ten minste kunt u alle conflicten op drie manieren oplossen (zie RefreshMode) zonder extra overweging. Aan de andere kant kunt u een specifieke actie aanwijzen voor elk type conflict voor elk lid in conflict.

LINQ naar SQL-typen die ondersteuning bieden voor conflictdetectie en -oplossing

Klassen en functies ter ondersteuning van de oplossing van conflicten in optimistische gelijktijdigheid in LINQ naar SQL zijn onder andere:

Zie ook