Frage

Ich fand ein MSDN-Artikel das beschreibt, wie EF Parallelität behandelt, wenn die Änderungen zu speichern:

  

In der Standardeinstellung [...] Object Service spart Objekt   Änderungen an der Datenbank ohne   Überprüfung auf Gleichzeitigkeit . Zum   Eigenschaften, die ein auftreten können   hohen Grad an Parallelität, wir   empfehlen, dass die Entitätseigenschaft sein   in dem Konzeptionslayer definiert sind, mit   ein Attribut   ConcurrencyMode = "fixed"

Ich habe zwei Fragen:

  1. Da sie keine Eigenschaften in meinem Modell, wo ConcurrencyMode="fixed", ist es sicher für mich anzunehmen, dass, wenn überhaupt eine OptimisticConcurrencyException ausgelöst wird, wenn die Änderungen zu speichern, ist es, weil das Unternehmen nicht mehr in den Datenspeicher vorhanden ist, dh es wurde von einem anderen Benutzer gelöscht, oder bin ich etwas fehlt?

    Ich stelle mir vor EF Ausführen einer UPDATE-Anweisung, die etwa wie folgt aussieht, die, wie ich es sehe, wird nur ein OptimisticConcurrencyException dazu führen, ausgelöst zu werden, wenn die Person mit ID = 1 existiert nicht:

    UPDATE Person SET FirstName = 'John' AND LastName = 'Smith' WHERE ID = 1
    
  2. Wenn ConcurrencyMode="fixed" verwenden, wird EF-Check für Concurrency wenn Entitäten als auch zu löschen? Mit anderen Worten, wird ausgeführt, EF jemals eine DELETE-Anweisung, die wie folgt aussieht (mit mehr als nur die Primärschlüssel in der WHERE-Klausel):

    DELETE FROM Person WHERE ID = 1 AND LastName = 'Doe'
    
War es hilfreich?

Lösung

Gute Frage.

(1) Ja, aber leider ist es nicht ganz so einfach. Da die EF (3.5) ein unabhängiges Assoziationsmodell aufweist, wird der Verband unabhängig zu behandeln, und obwohl Sie haben nicht gesagt, so ist es einen Teil der Gleichzeitigkeit Prüfungen während Aktualisierungen und Löschungen wird.

d. wenn Sie eine Person aktualisieren, werden Sie oft Updates sehen, die wie folgt aussehen:

UPDATE Person SET Partner = NULL AND FirstName = 'John' AND LastName = 'Smith' 
WHERE ID = 1 AND Partner = 2

d. Partner ist eine FK-Spalte.

Dies alles ändert in 4.0, wenn Sie FK Verbände verwenden, da wir die meisten Menschen zu erwarten.

(2) Für jeden ConcurrencyMode DELETE = 'fixed' Eigenschaften werden bei der Lösch geprüft. Die Ausnahme ist, wenn Sie einen SPROC zum Löschen haben, das nicht, dass Concurrency Werte akzeptiert.

Hope, das hilft

Alex

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top