并发标记Concurrency Tokens

备注

此页介绍如何配置并发标记。 有关并发控制的工作原理的详细说明,请参阅处理并发冲突EF Core 和如何处理应用程序中的并发冲突的示例。

配置为并发标记的属性用于实现乐观并发控制。

配置Configuration

  1. public class Person
  2. {
  3. public int PersonId { get; set; }
  4. [ConcurrencyCheck]
  5. public string LastName { get; set; }
  6. public string FirstName { get; set; }
  7. }
  1. protected override void OnModelCreating(ModelBuilder modelBuilder)
  2. {
  3. modelBuilder.Entity<Person>()
  4. .Property(p => p.LastName)
  5. .IsConcurrencyToken();
  6. }

Timestamp/rowversionTimestamp/rowversion

Timestamp/rowversion 是一个属性,在每次插入或更新行时,数据库会自动为其生成新值。 此属性也被视为并发标记,这确保了在你查询行后,如果正在更新的行发生了更改,则会出现异常。 确切的详细信息取决于所使用的数据库提供程序;对于 SQL Server,通常使用byte [] 属性,该属性将设置为数据库中的ROWVERSION列。

可以按如下所示将属性配置为 timestamp/rowversion:

  1. public class Blog
  2. {
  3. public int BlogId { get; set; }
  4. public string Url { get; set; }
  5. [Timestamp]
  6. public byte[] Timestamp { get; set; }
  7. }
  1. class MyContext : DbContext
  2. {
  3. public DbSet<Blog> Blogs { get; set; }
  4. protected override void OnModelCreating(ModelBuilder modelBuilder)
  5. {
  6. modelBuilder.Entity<Blog>()
  7. .Property(p => p.Timestamp)
  8. .IsRowVersion();
  9. }
  10. }
  11. public class Blog
  12. {
  13. public int BlogId { get; set; }
  14. public string Url { get; set; }
  15. public byte[] Timestamp { get; set; }
  16. }