optimistic-concurrency

___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123entityframework ___ Bei Fragen zum ADO.NET Entity Framework die Object-Relational-Mapping (ORM) -Tools für das .NET Framework. Fügen Sie gegebenenfalls auch ein versionsspezifisches Tag hinzu. ___ tag123optimistischeWirklichkeit ___ Eine Methode zur Steuerung des gemeinsamen Zugriffs auf Transaktionssysteme, die es mehreren Transaktionen ermöglicht, häufig Ressourcen zu durchlaufen, ohne sich gegenseitig zu stören ___ answer29809605 ___

Optimistischer Nebenläufigkeit gilt hier nicht.

Eine Junction-Tabelle wird nie aktualisiert. Seine Datensätze werden entweder hinzugefügt oder gelöscht. Dies bedeutet, dass es keine CRUD-Operationen gibt, die eine Zeilenversion benötigen.

In der Tat ist Nebenläufigkeit ziemlich einfach:

  • Zwei gleichzeitige Benutzer können nicht die gleiche Zuordnung hinzufügen, da die letzte auf eine eindeutige Schlüsselverletzung stößt.
  • Zwei gleichzeitige Benutzer können dieselbe Zuordnung nicht löschen, da die letzte eine Ausnahme enthält, bei der eine unerwartete Anzahl von Datensätzen (0) betroffen war.
  • Wie bei Fremdschlüsselproblemen (Hinzufügen / Entfernen einer Zuordnung zu einer Entität, die zwischenzeitlich gelöscht wurde). Diese werden auch Ausnahmen auslösen.

Es geht also darum, Ausnahmen zu behandeln und sie in verständliches Benutzerfeedback zu übersetzen. All diese Situationen müssen auch in Situationen behandelt werden, in denen Aktualisierungen (und optimistische Nebenläufigkeit) eine Rolle spielen.

    
___ qstntxt ___

Ich habe eine Entität, die eine Viele-zu-Viele-Beziehung hat. Als Beispiel betrachten Sie diese Entität:

%Vor%

So konfiguriere ich das Mapping:

%Vor%

Da diese Beziehung nun vom EF verwaltet wird, habe ich nicht wirklich Zugriff auf den %code% %code% in meinem Code und kann den gleichzeitigen Zugriff darauf nicht verarbeiten. Damit diese Komposition den gleichzeitigen Zugriff (Hinzufügen / Entfernen) verarbeiten kann, muss ich die Viele-zu-Viele-Beziehung selbst behandeln und dann eine %code% -Spalte hinzufügen oder gibt es eine Möglichkeit, EF anzuweisen, dies gleichzeitig selbst zu behandeln? Wie eine Konfiguration im Model Builder.

Bearbeiten: Ich benutze EF 6 und wenn es momentan eine gleichzeitige Operation für die Entität gibt (zB versucht, einen Freund zu entfernen, der gerade nicht auf der Datenbank beendet wird) erhalte ich die folgende Fehlermeldung und ein %code% :

  

Beim Speichern von Entitäten, die keinen Fremdschlüssel enthalten, ist ein Fehler aufgetreten   Eigenschaften für ihre Beziehungen. Die Eigenschaft EntityEntries wird   Gibt null zurück, da eine einzelne Entität nicht als Quelle identifiziert werden kann   der Ausnahme. Behandlung von Ausnahmen beim Speichern kann vorgenommen werden   einfacher, indem Sie die Fremdschlüsseleigenschaften in Ihren Entitätstypen angeben. Sehen   die InnerException für Details.

    
___ qstnhdr ___ Entity Framework Many-to-Many-Self-Relationship- und Optimistic-Concurrency-Control ___ answer29809270 ___

Obwohl in der UserFriends-Tabelle keine Zeileversionsspalte vorhanden ist, kann EF immer noch erkennen, dass die Ursache für DbContext.SaveChanges-Fehler ein Gleichzeitigkeitsproblem im Fall einer Viele-zu-Viele-Beziehung ist. In diesem Fall gibt die ef die Exception OptimisticConcurrencyException mit DbUpdateException opaqued aus. Verwenden Sie den folgenden Code, um es abzufangen:

%Vor%

Sie können die aktuell fließende API nicht so konfigurieren, dass sie automatisch in die UserFriends-Tabellenzeilenspalten eingefügt wird. Sie können jedoch nach der Migration manuell zur CreateTable-Anweisung von createTable der Zeilenspaltenzeile hinzufügen:

%Vor%

Dies ändert jedoch nicht das DbContext-Verhalten, wenn ein Gleichzeitigkeitsproblem in einer Viele-zu-Viele-Beziehung auftritt.

    
___
4
Antworten

Was ist ein effizienter Weg, um Einfügungen von einzigartigen "unveränderlichen" Entitäten durch mehrere Produzenten mit optimistischem Concurrency-Ansatz zu handhaben?

Nehmen Sie ein System mit mehreren gleichzeitigen Produzenten an, die jeweils bestrebt sind, einen Graphen von Objekten mit den folgenden gemeinsamen Entitäten zu erhalten, die durch ihre Namen eindeutig identifizierbar sind: %Vor% Beispiel:...
26.12.2016, 20:48
2
Antworten

Entity Framework Many-to-Many-Self-Relationship- und Optimistic-Concurrency-Control

Ich habe eine Entität, die eine Viele-zu-Viele-Beziehung hat. Als Beispiel betrachten Sie diese Entität: %Vor% So konfiguriere ich das Mapping: %Vor% Da diese Beziehung nun vom EF verwaltet wird, habe ich nicht wirklich Zugriff auf den...
22.04.2015, 16:11