zoukankan      html  css  js  c++  java
  • 已实现乐观锁功能,FreeSql.DbContext 准备起航

    上回说到 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(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|document.db;Pooling=true;Max Pool Size=10")
        .UseAutoSyncStructure(true)
        .UseLazyLoading(true)
        .UseNoneCommandParameter(true)
    
        .UseMonitorCommand(cmd => Trace.WriteLine(cmd.CommandText))
        .Build();
    
    public class Song {
        [Column(IsIdentity = true)]
        public int Id { get; set; }
        public string BigNumber { get; set; }
    
        [Column(IsVersion = true)]//使用简单
        public long versionRow { get; set; }
    }
    
    public class SongContext : DbContext {
    
        public DbSet<Song> Songs { get; set; }
    
        protected override void OnConfiguring(DbContextOptionsBuilder builder) {
            builder.UseFreeSql(fsql);
        }
    }
    

    当更新时,版本不正确提示以下错误,DbContext 将回滚操作:

    总结

    FreeSql.DbContext 实现类似 EFCore 使用方法,跟踪对象状态,最终通过 SaveChanges 方法提交事务。

    目前是第二个初版,已实现状态跟踪保存(导航属性的跟踪暂时不支持)。

    配合乐观锁这个杀手锏,FreeSql 越来越有 ORM 的影子了。

    github: https://github.com/2881099/FreeSql(求星星,谢谢)

  • 相关阅读:
    Codeforces Round #647 (Div. 2) E Johnny and Grandmaster
    Codeforces1363E Tree Shuffling
    洛谷P6583 回首过去
    Codeforces 817D Imbalanced Array
    Codeforces 213E Two Permutations
    hdu6312 Game
    树算法笔记(三):Prim最小生成树
    基础数学(四):充分与必要条件
    树算法笔记(二):Kruskal最小生成树
    树算法笔记(一):并查集
  • 原文地址:https://www.cnblogs.com/kellynic/p/10624656.html
Copyright © 2011-2022 走看看