上回说到 FreeSql.DbContext 的规则,以及演示它的执行过程,可惜当时还不支持“乐观锁”,对于更新数据来讲并不安全。
FreeSql 核心库 v0.3.27 已提供乐观锁支持。
实现原理
乐观锁的原理,是利用实体某字段,如:long version,更新前先查询数据,此时 version 为 1,更新时产生的 SQL 会附加 where version = 1,当修改失败时(即 Affrows == 0)抛出异常。
每个实体只支持一个乐观锁,在属性前标记特性:[Column(IsVersion = true)] 即可。
无论是使用 FreeSql/FreeSql.Repository/FreeSql.DbContext,每次更新 version 的值都会增加 1
至此,FreeSql.DbContext 的更新操作就安全了。
安装
dotnet add package FreeSql.DbContext
测试功能
下面演示更新 BigNumber 属性,为什么定义他为 string 呢,对于数字的更新 set clicks = clicks + 1,是安全的操作。
BigInteger 了解吗,我们就当 BigNumber 是一个超大的数字吧,普通数字无法表示的。
var fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString