ParallelitätstokenConcurrency Tokens

Hinweis

Diese Seite dokumentiert parallelitätstoken zu konfigurieren.This page documents how to configure concurrency tokens. Finden Sie unter Behandlung von Nebenläufigkeitskonflikten für eine ausführliche Erläuterung der Funktionsweise der parallelitätssteuerung in EF Core und Beispiel Behandlung von nebenläufigkeitskonflikten in Ihrer Anwendung.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 konfiguriert werden verwendet, um die Steuerung für optimistische Parallelität implementieren.Properties configured as concurrency tokens are used to implement optimistic concurrency control.

KonventionenConventions

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

DatenanmerkungenData Annotations

Sie können die Datenanmerkungen verwenden, um eine Eigenschaft als ein parallelitätstoken zu konfigurieren.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, um eine Eigenschaft als ein parallelitätstoken zu konfigurieren.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; }
}

Zeitstempel/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 Sie eine Ausnahme angezeigt werden, wenn anderen Person eine Zeile, die Sie versuchen geändert hat, die aktualisiert werden, weil Sie für die Daten abgefragt.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.

Wie dies erreicht wird, obliegt den Datenbankanbieter, der verwendet wird.How this is achieved is up to the database provider being used. Für SQL Server Zeitstempel wird in der Regel verwendet, auf eine Byte [] setup-Eigenschaft, die wird 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 Eigenschaften nicht als Zeitstempel konfiguriert.By convention, properties are never configured as timestamps.

DatenanmerkungenData Annotations

Sie können Datenanmerkungen verwenden, so konfigurieren Sie eine Eigenschaft als einen Zeitstempel.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; }
}