行版本号及并发控制


  行版本号 RowVersion 是指新增或修改时,这个字段都会被更新,它一般用来做增量判断或并发控制。在属性映射时,可以指定它的 IsRowVersion 为 true(见 属性映射),这样新增或修改数据时,均会自动更新此字段。作为 RowVersion 的属性的类型支持 DateTimeDateTimeOffsetGuidlongbyte[] 几种。

  你只需要增加 RowVersion 字段并且打开 IsRowVersion = true 即可,如下所示:

public partial class Products : LightEntity<Products>
{
    [PropertyMapping(ColumnName = "product_id", IsPrimaryKey = true, GenerateType = IdentityGenerateType.AutoIncrement, IsNullable = false)]
    public virtual int Id { get; set; }

    //省略

    [PropertyMapping(ColumnName = "rowversion", IsNullable = false, 
    IsRowVersion = true,
    IsConcurrencyToken = true)]
    public virtual DateTime RowVersion { get; set; }

    public virtual EntitySet<OrderDetails> OrderDetailses { get; set; }
}

  并发控制即是实现悲观锁,它是为了防止多人同时修改同一条数据而造成的数据不一致问题。更新数据时,Fireasy 会使用此值作为附加的条件进行更新。它的控制有效时间取决于从查询出实体到更新的时间间隔。

  与 IsRowVersion 类似,只要在映射时设置 IsConcurrencyToken = true 即可。并发控制标记一般使用 RowVersion 字段。