Frage

Ich versuche, die angegebene Lösung umzusetzen Umgang mit Parallelität mit dem Entity Framework in einer ASP.NET MVC-Anwendung .

Der Artikel sagt:

Hinzufügen einer Tracking-Eigenschaft zur Abteilungsentität

Fügen Sie in Models\Department.cs eine Tracking-Eigenschaft hinzu:

[Timestamp] 
public Byte[] Timestamp { get; set; }

Das Timestamp-Attribut gibt an, dass diese Spalte in die Where-Klausel der an die Datenbank gesendeten Update- und Delete-Befehle einbezogen wird.

Da ich ein verwende Modell zuerst Vorgehensweise habe ich die Schritte 1 bis 5 befolgt, die in beschrieben sind Erstellen einer Zeitstempelspalte mit Entity Framework

  1. Fügen Sie der Entität im EF-Modell eine Eigenschaft mit dem Namen „Timestamp“ hinzu
  2. Legen Sie den Typ auf Binär fest
  3. Setzen Sie nullable auf false
  4. Setzen Sie StoreGeneratedPattern auf Computed
  5. Legen Sie ConcurrencyMode auf Fixed fest

Wenn ich meinen Code aus dem Datenbankmodell aktualisiere, enthält die Datei „Models\Department.cs“ jetzt „

    public virtual byte[] Timestamp
    {
        get;
        set;
    }

Dann habe ich die Metadatenklasse verwendet, um das Timestamp-Attribut anzugeben:

// Metadata for Department entity
public class DepartmentMetadata
{
    [Timestamp]
    public byte Timestamp { get; set; }
}

Q1. Ich habe getestet, ob der Wert des Timestamp Die Spalte ändert sich bei Zeilenänderungen.Das ist es nicht.

BEARBEITEN 1 Das Problem wurde durch den SQL Server-Spaltentyp verursacht binary, wo es vom Typ hätte sein sollen timestamp.Durch Ändern des Datentyps wurde das Problem behoben, dass die Zeitstempelspalte nicht aktualisiert wurde.

Q2. Ich habe versucht, dieselbe Entität zu ändern (mithilfe von „In neuem Tab öffnen“), um zu sehen, ob eine OptimisticConcurrencyException ist geworfen.Das ist es nicht.Was mache ich falsch?Bitte helfen Sie mir zu verstehen, danke.

Screenshot of my <code>Timestamp</code> property

War es hilfreich?

Lösung

Das Problem wurde dadurch verursacht, dass ich einen ObjectContext pro HTTP-Sitzung hatte und daher einen neuen Tab öffnen und testen musste NICHT eine Parallelitätsausnahme verursachen.

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