ParallelitätstokenConcurrency Tokens

Hinweis

Auf dieser Seite dokumentiert, wie Sie parallelitätstoken zu konfigurieren.This page documents how to configure concurrency tokens. Finden Sie unter Behandlung von Parallelitätskonflikten für eine ausführliche Erklärung der Funktionsweise der parallelitätssteuerung auf EF-Kern- und Beispiele zum Parallelitätskonflikte in Ihrer Anwendung zu behandeln.See Handling Concurrency Conflicts for a detailed explanation of how concurrency control works on EF Core and examples of how to handle concurrency conflicts in your application.

Eigenschaften, die als parallelitätstoken verwendet werden, um die Steuerung durch vollständige Parallelität implementieren konfiguriert werden.Properties configured as concurrency tokens are used to implement optimistic concurrency control.

KonventionenConventions

Gemäß der Konvention werden die Eigenschaften nie als parallelitätstoken konfiguriert.By convention, properties are never configured as concurrency tokens.

DatenanmerkungenData Annotations

Sie können die Datenanmerkungen so konfigurieren Sie eine Eigenschaft als ein parallelitätstoken verwenden.You can use the Data Annotations to configure a property as a concurrency token.

public class Person
{
    public int PersonId { get; set; }

    [ConcurrencyCheck]
    public string LastName { get; set; }

    public string FirstName { get; set; }
}

Fluent-APIFluent API

Sie können die Fluent-API verwenden, so konfigurieren Sie eine Eigenschaft als ein parallelitätstoken.You can use the Fluent API to configure a property as a concurrency token.

class MyContext : DbContext
{
    public DbSet<Person> People { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>()
            .Property(p => p.LastName)
            .IsConcurrencyToken();
    }
}

public class Person
{
    public int PersonId { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
}

Timestamp/ZeilenversionTimestamp/row version

Ein Zeitstempel ist eine Eigenschaft, wird ein neuer Wert von der Datenbank generiert jedes Mal, wenn eine Zeile eingefügt oder aktualisiert wird.A timestamp is a property where a new value is generated by the database every time a row is inserted or updated. Die Eigenschaft wird auch als ein parallelitätstoken behandelt.The property is also treated as a concurrency token. Dadurch wird sichergestellt, dass eine Ausnahme erhalten Sie, wenn andere Benutzer eine Zeile geändert hat, die aktualisiert werden, weil Sie für die Daten abgefragt werden soll.This ensures you will get an exception if anyone else has modified a row that you are trying to update since you queried for the data.

Wird dies erreicht ist, bis zu der Datenbankanbieter verwendet wird.How this is achieved is up to the database provider being used. Für SQL Server wird in der Regel Zeitstempel auf verwendet eine Byte [] setup-Eigenschaft, die als eine ROWVERSION Spalte in der Datenbank.For SQL Server, timestamp is usually used on a byte[] property, which will be setup as a ROWVERSION column in the database.

KonventionenConventions

Gemäß der Konvention werden die Eigenschaften nie als Zeitstempel konfiguriert.By convention, properties are never configured as timestamps.

DatenanmerkungenData Annotations

Datenanmerkungen können Sie eine Eigenschaft als Zeitstempel konfigurieren.You can use Data Annotations to configure a property as a timestamp.

public class Blog
{
    public int BlogId { get; set; }

    public string Url { get; set; }
    
    [Timestamp]
    public byte[] Timestamp { get; set; }
}

Fluent-APIFluent API

Sie können die Fluent-API verwenden, so konfigurieren Sie eine Eigenschaft als einen Zeitstempel.You can use the Fluent API to configure a property as a timestamp.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(p => p.Timestamp)
            .IsRowVersion();
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public byte[] Timestamp { get; set; }
}