!40 新增支持abp实体IHasConcurrencyStamp接口,并发更新ConcurrencyStamp

Merge pull request !40 from Bi8bo/Fix-ConcurrencyStampProp-invalid
This commit is contained in:
橙子
2024-09-04 08:29:58 +00:00
committed by Gitee
2 changed files with 21 additions and 2 deletions

View File

@@ -1,8 +1,11 @@
using System.Linq; using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Text;
using Microsoft.Extensions.Logging;
using SqlSugar; using SqlSugar;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Auditing; using Volo.Abp.Auditing;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using Volo.Abp.Linq; using Volo.Abp.Linq;
@@ -372,6 +375,20 @@ namespace Yi.Framework.SqlSugarCore.Repositories
public virtual async Task<bool> UpdateAsync(TEntity updateObj) public virtual async Task<bool> UpdateAsync(TEntity updateObj)
{ {
if (typeof(TEntity).IsAssignableTo<IHasConcurrencyStamp>())//带版本号乐观锁更新
{
try
{
int num = await (await GetDbSimpleClientAsync())
.Context.Updateable(updateObj).ExecuteCommandWithOptLockAsync(true);
return num>0;
}
catch (VersionExceptions ex)
{
throw new AbpDbConcurrencyException($"{ex.Message}[更新失败ConcurrencyStamp不是最新版本],entityInfo{updateObj}", ex);
}
}
return await (await GetDbSimpleClientAsync()).UpdateAsync(updateObj); return await (await GetDbSimpleClientAsync()).UpdateAsync(updateObj);
} }

View File

@@ -320,9 +320,11 @@ namespace Yi.Framework.SqlSugarCore
/// <param name="column"></param> /// <param name="column"></param>
protected virtual void EntityService(PropertyInfo property, EntityColumnInfo column) protected virtual void EntityService(PropertyInfo property, EntityColumnInfo column)
{ {
if (property.Name == "ConcurrencyStamp") if (property.Name == nameof(IHasConcurrencyStamp.ConcurrencyStamp)) //带版本号并发更新
{ {
column.IsIgnore = true; // column.IsOnlyIgnoreInsert = true;
// column.IsOnlyIgnoreUpdate = true;
column.IsEnableUpdateVersionValidation = true;
} }
if (property.PropertyType == typeof(ExtraPropertyDictionary)) if (property.PropertyType == typeof(ExtraPropertyDictionary))
{ {