冲扬心法

笑声激发自强,发愤、图强、飞身向上

   :: 首页  ::  ::  ::  :: 管理

并发标记(并发令牌)

  本节主要介绍如何配置并发标记。(后面在介绍保存数据时,再介绍如何处理并发冲突的示例)

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

  数据批注:

using System.ComponentModel.DataAnnotations;
    public class Person
    {
        public int PersonId { get; set; }

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

        public string LastName { get; set; }
    }

  Fluent API:

            modelBuilder.Entity<Person>()
                .Property(b => b.FirstName)
                .IsConcurrencyToken();

 

Timestamp/rowversion

  Timestamp/rowversion是一个属性。这个属性指示:每次插入或者更新行时,数据库会自动为其生成新值。此属性也被视为并发标记。

  作用:确保你在更新的数据行在你查询之后发生了更改后,你会得到一个异常。

  具体细节取决于所使用的数据库提供程序;对于SQL Server,通常使用byte[]属性,它将被设置为数据库中的ROWVERSION列。

 

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

  数据批注:

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

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

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

  Fluent API:

    class Team
    {
        public int TeamId { get; set; }

        public byte[] RecordTimestamp { get; set; }
    }

    class MyDbContext: DbContext
    {
        public DbSet<BlogModel> Blogs { get; set; }
        public DbSet<PostModel> Posts { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Team>()
                .Property(b => b.RecordTimestamp)
                .IsRowVersion();
    ……
}

 

posted on 2020-12-16 22:15  风雨一肩挑  阅读(180)  评论(0编辑  收藏  举报