并发标记Concurrency Tokens
备注
此页介绍如何配置并发标记。 有关并发控制的工作原理的详细说明,请参阅处理并发冲突EF Core 和如何处理应用程序中的并发冲突的示例。
配置为并发标记的属性用于实现乐观并发控制。
配置Configuration
public class Person
{
public int PersonId { get; set; }
[ConcurrencyCheck]
public string LastName { get; set; }
public string FirstName { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.Property(p => p.LastName)
.IsConcurrencyToken();
}
Timestamp/rowversionTimestamp/rowversion
Timestamp/rowversion 是一个属性,在每次插入或更新行时,数据库会自动为其生成新值。 此属性也被视为并发标记,这确保了在你查询行后,如果正在更新的行发生了更改,则会出现异常。 确切的详细信息取决于所使用的数据库提供程序;对于 SQL Server,通常使用byte [] 属性,该属性将设置为数据库中的ROWVERSION列。
可以按如下所示将属性配置为 timestamp/rowversion:
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
[Timestamp]
public byte[] Timestamp { get; set; }
}
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; }
}