乐观锁的关键是通过版本号
判断数据是否被修改,确定操作是否成功
以下示例通过自增版本号的方式,判断是否更新数据
数据库为sqlite数据库,包含一张myresource
表,字段为Id
、Version
、Resource
其中Id
为主键,Version
为版本号,Resource
为业务数据
关键代码
using(DbConnection connection = new DbConnection(dbConnectionString))
{
var resource = connection.Query<MyResource>("select Id,Version,Resource from myresource where Id=1").FirstOrDefault();
//模拟进行了一些耗时业务处理
Thread.Sleep(100);
var oldVersion = resource.version;
//核心是根据Id+版本号进行更新,更新数为0,则表示更新失败
if (connection.ExecuteNonQuery($"update myresource set Resource={++resource.resource},Version={++resource.version} where Id={resource.Id} and Version={oldVersion}") == 1)
{
Console.WriteLine($"修改数据成功