Vollständige Parallelität – Übersicht (LINQ to SQL)

Aktualisiert: November 2007

LINQ to SQL unterstützt die Steuerung der vollständigen Parallelität. In der folgenden Tabelle werden Begriffe beschrieben, die in der LINQ to SQL-Dokumentation für vollständige Parallelität gelten:

Begriffe

Beschreibung

Parallelität

Die Situation, in der zwei oder mehr Benutzer gleichzeitig versuchen, die gleiche Datenbankzeile zu aktualisieren.

Parallelitätskonflikt

Die Situation, in der zwei oder mehr Benutzer gleichzeitig versuchen, konkurrierende Werte an eine oder mehrere Datenbankzeilen zu übergeben.

Parallelitätssteuerung

Die Technik zur Behebung von Parallelitätskonflikten.

Steuerung der vollständigen Parallelität

Die Technik zur Prüfung, ob andere Transaktionen die Werte in einer Zeile geändert haben, bevor die Übergabe von Änderungen zugelassen wird.

Gegensatz zur Steuerung der unvollständigen Parallelität, die den Datensatz sperrt, um Parallelitätskonflikte zu vermeiden.

Die vollständige Steuerung verdankt ihre Bezeichnung der Tatsache, dass sie davon ausgeht, dass ein Konflikt zwischen Transaktionen unwahrscheinlich ist.

Konfliktlösung

Der Prozess des Aktualisierens eines problematischen Elements durch eine erneute Datenbankabfrage und Ausgleichen der Unterschiede.

Wenn ein Objekt aktualisiert wird, enthält der LINQ to SQL-Änderungsprotokollierer die folgenden Daten:

  • Die ursprünglich aus der Datenbank abgerufenen Werte, die für die Aktualisierungsprüfung verwendet wurden.

  • Die neuen Datenbankwerte aus der nachfolgenden Abfrage.

LINQ to SQL ermittelt dann, ob ein Objektkonflikt vorliegt (d. h., ob sich die Werte von einem oder mehreren Membern geändert haben). Liegt ein Objektkonflikt vor, ermittelt LINQ to SQL dann, bei welchem Member dieser Konflikt auftritt.

Jeder von LINQ to SQL erkannte Memberkonflikt wird einer Konfliktliste hinzugefügt.

Im LINQ to SQL-Objektmodell tritt ein Konflikt bei der vollständigen Parallelität auf, wenn die beiden folgenden Bedingungen eintreten:

  • Der Client versucht, Änderungen an die Datenbank zu übergeben.

  • Ein oder mehrere Werte der Aktualisierungsprüfung wurden in der Datenbank aktualisiert, seit der Client sie zuletzt gelesen hat.

Die Behebung dieses Konflikts umfasst die Erkennung der Member, bei deren Objekten der Konflikt auftritt. Anschließend wird entschieden, wie weiter vorgegangen wird.

Hinweis:

Nur die als Always oder WhenChanged zugeordneten Member nehmen an Prüfungen der vollständigen Parallelität teil. Für die als Never gekennzeichneten Member finden keine Prüfungen statt. Weitere Informationen finden Sie unter UpdateCheck.

Beispiel

Im folgenden Szenario bereitet beispielsweise User1 eine Aktualisierung vor, indem er eine Zeile aus der Datenbank abruft. User1 empfängt eine Zeile mit Werten von Alfreds, Maria und Sales.

User1 möchte den Wert der Manager-Spalte in Alfred und den Wert der Department-Spalte in Marketing ändern. Bevor User1 diese Änderungen übergeben kann, hat User2 Änderungen an der Datenbank vorgenommen. Damit wurde der Wert der Assistant-Spalte in Mary und der Wert der Department-Spalte in Service geändert.

Wenn User1 jetzt versucht, Änderungen zu übergeben, schlägt die Übergabe fehl, und eine ChangeConflictException-Ausnahme wird ausgelöst. Dieser Fall tritt ein, weil die Datenbankwerte der Assistant-Spalte und der Department-Spalte nicht den Erwartungen entsprechen. Bei Membern, die die Assistant-Spalte und die Department-Spalte vertreten, tritt ein Konflikt auf. Die folgende Tabelle fasst diese Situation zusammen.

 

Manager

Assistant

Department

Ursprünglicher Zustand

Alfreds

Maria

Sales

User1

Alfred

 

Marketing

User2

 

Mary

Service

Sie können Konflikte wie diesen auf verschiedene Weise lösen. Weitere Informationen finden Sie unter Gewusst wie: Verwalten von Änderungskonflikten (LINQ to SQL).

Checkliste für Konflikterkennung und -behebung

Sie können Konflikte auf jeder Detailebene erkennen und beheben. Einerseits können Sie alle Konflikte auf eine von drei Arten beheben (siehe RefreshMode). Hierbei müssen keine weiteren Aspekte berücksichtigt werden. Andererseits können Sie für jeden Konflikttyp bei jedem Member eine bestimmte Aktion zuweisen.

LINQ to SQL-Typen, die Konfliktermittlung und -behebung unterstützen

Zu den Klassen und Features, die die Behebung von Konflikten bei der vollständigen Parallelität in LINQ to SQL unterstützen, zählen:

Siehe auch

Weitere Ressourcen

Gewusst wie: Verwalten von Änderungskonflikten (LINQ to SQL)