Tokeny współbieżnościConcurrency Tokens

Uwaga

Ta strona dokumenty, jak skonfigurować tokeny współbieżności.This page documents how to configure concurrency tokens. Zobacz obsługi konfliktom współbieżności szczegółowy opis działania formant współbieżności na podstawowe EF i przykłady sposobu obsługi konfliktom współbieżności w aplikacji.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.

Właściwości skonfigurowane jako tokeny współbieżności są używane do implementowania optymistyczne sterowanie współbieżnością.Properties configured as concurrency tokens are used to implement optimistic concurrency control.

KonwencjeConventions

Według Konwencji właściwości nigdy nie są skonfigurowane jako tokeny współbieżności.By convention, properties are never configured as concurrency tokens.

Adnotacji danychData Annotations

Adnotacje danych służy do konfigurowania właściwości jako tokenem współbieżności.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; }
}

Interfejsu API FluentFluent API

Interfejsu API Fluent umożliwia skonfigurowanie właściwości jako tokenem współbieżności.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; }
}

Wersja wiersza/znacznik czasuTimestamp/row version

Sygnatura czasowa jest właściwością, gdzie nowa wartość jest generowany przez bazę danych, za każdym razem, gdy wiersz jest wstawiane lub aktualizowane.A timestamp is a property where a new value is generated by the database every time a row is inserted or updated. Właściwości są także traktowane jako tokenem współbieżności.The property is also treated as a concurrency token. Dzięki temu otrzymasz wyjątek, jeśli osobom został zmodyfikowany na wiersz, który próbujesz zaktualizować, ponieważ zapytanie dotyczące danych.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.

Jak jest to osiągane jest używany dostawca bazy danych.How this is achieved is up to the database provider being used. Dla programu SQL Server sygnatury czasowej jest zwykle używany w byte [] właściwość, która będzie można skonfigurować jako ROWVERSION kolumny w bazie danych.For SQL Server, timestamp is usually used on a byte[] property, which will be setup as a ROWVERSION column in the database.

KonwencjeConventions

Według Konwencji właściwości nigdy nie są skonfigurowane jako sygnatur czasowych.By convention, properties are never configured as timestamps.

Adnotacji danychData Annotations

Adnotacje danych służy do konfigurowania właściwości jako sygnaturę czasową.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; }
}

Interfejsu API FluentFluent API

Do skonfigurowania właściwości jako sygnaturę czasową, można użyć interfejsu API Fluent.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; }
}