使用场景:多个用户相近的时间打开编辑框 ,然后A用户在在五分钟后提交, B用户在十分钟后提交那么B用户肯定会覆盖A用户编辑的内容
具体用法: https://www.donet5.com/Home/Doc?typeId=2399
新功能 :5.0.8.3-preview02
数据库支持 | SqlServer | PgSql | Oracle | MySql |
2个相同的业务代码 同时执行时必须等待 第一个执行成功后执行
主键查询一般是行锁,如果非主键可以会变成表锁
db.BeginTran(); //查询条件记录后锁表 var data=db.Queryable<Order>().TranLock(DbLockType.Wait).Where(it=>it.Id==1).ToList();//返回条数尽量最少尽量主键 //插入、更新等操作 ....... db.CommitTran();
数据库支持 | SqlServer | PgSql | Oracle | MySql 8.0+ |
新功能 :5.0.8.3-preview02
2个相同的业务代码 同时执行时只会生效一个,其它都扔出错误
db.BeginTran(); //查询条件记录后锁表 var data = db.Queryable<Order>().TranLock(DbLockType.Error).Where(it=>it.Name=="a").ToList();//返回条数尽量最少 for update UPDLOCK //插入、更新等操作 ....... db.CommitTran();
测试代码:
用的来验证是否扔出异常
for (int i = 0; i < 10; i++) { Task.Run(() => { try { var db = GetInstance();//用的sqlsugarclient保证db线程安全每次New一下 db.BeginTran(); var getAll = db.Queryable<Order>().TranLock(DbLockType.Error).ToList(); System.Threading.Thread.Sleep(1000); db.CommitTran(); Console.WriteLine("成功"); } catch (Exception ex) { Console.WriteLine("失败"); } }); }
2016 © donet5.comApache Licence 2.0