diff --git a/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs b/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs index 75a4f22ee..658632736 100644 --- a/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs +++ b/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs @@ -45,43 +45,6 @@ namespace IRaCIS.Core.Infra.EFCore #region 异步添加 - private async Task EntityVerifyAsync(bool isAdd, EntityVerifyExp[] verify, Guid? entitydId = null) - { - - if (isAdd) - { - foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyUpdate && t.IsVerify)) - { - if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false)) - { - throw new BusinessValidationFailedException(verifyItem.VerifyMsg); - } - } - } - else - { - foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyAdd && t.IsVerify)) - { - if (verifyItem.verifyType == VerifyEnum.OnlyUpdate) - { - if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false)) - { - throw new BusinessValidationFailedException(verifyItem.VerifyMsg); - } - } - else if (verifyItem.verifyType == VerifyEnum.Both) - { - if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp.And(t => t.Id != entitydId)).ConfigureAwait(false)) - { - throw new BusinessValidationFailedException(verifyItem.VerifyMsg); - } - } - } - } - - } - - public async Task> AddRangeAsync(IEnumerable entities) { @@ -127,7 +90,7 @@ namespace IRaCIS.Core.Infra.EFCore #endregion - #region 异步更新 + #region 异步 EF 跟踪 部分字段更新 /// 用前端传递的视图模型字段,更新,同时返回数据库该条记录的原始信息,方便对比某些字段是否更改,进行相应的逻辑操作 @@ -240,12 +203,10 @@ namespace IRaCIS.Core.Infra.EFCore - - #endregion - #region 异步 单个完整实体 EF 跟踪 自动生成 更新 和删除语句 + #region 异步 EF 跟踪 自动生成 更新 和删除语句 /// EF跟踪方式 更新,全字段更新 @@ -279,11 +240,6 @@ namespace IRaCIS.Core.Infra.EFCore } } - #endregion - - #region 异步 批量删除和更新 - - /// 批量删除,EF跟踪方式(所有查询出来,再删除 浪费性能,但是稽查 或者触发某些操作时,需要知道数据库实体信息 不可避免用这种) public async Task TrackingBatchDeleteAsync(Expression> deleteFilter) @@ -297,6 +253,11 @@ namespace IRaCIS.Core.Infra.EFCore } + #endregion + + + + #region 不走EF 跟踪机制的删除 更新 以及批量操作 /// 批量删除,相当于原生sql, 没用EF跟踪方式(所有查询出来,再删除 浪费性能) public async Task BatchDeleteAsync(Expression> deleteFilter) @@ -341,11 +302,59 @@ namespace IRaCIS.Core.Infra.EFCore } - #endregion - #region 保存 和忽略 + #region 保存 、忽略 、验证 + public async Task InsertOrUpdateAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify) + { + var entity = _mapper.Map(from); + + + if (entity.Id == Guid.Empty) + { + return await InsertFromDTOAsync(from, autoSave, verify); + } + else + { + return await UpdateFromDTOAsync(from, autoSave, false, verify); + } + } + private async Task EntityVerifyAsync(bool isAdd, EntityVerifyExp[] verify, Guid? entitydId = null) + { + + if (isAdd) + { + foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyUpdate && t.IsVerify)) + { + if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false)) + { + throw new BusinessValidationFailedException(verifyItem.VerifyMsg); + } + } + } + else + { + foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyAdd && t.IsVerify)) + { + if (verifyItem.verifyType == VerifyEnum.OnlyUpdate) + { + if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false)) + { + throw new BusinessValidationFailedException(verifyItem.VerifyMsg); + } + } + else if (verifyItem.verifyType == VerifyEnum.Both) + { + if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp.And(t => t.Id != entitydId)).ConfigureAwait(false)) + { + throw new BusinessValidationFailedException(verifyItem.VerifyMsg); + } + } + } + } + + } private async Task SaveChangesAsync(bool autoSave) { @@ -403,21 +412,8 @@ namespace IRaCIS.Core.Infra.EFCore #region 不常用 - public async Task InsertOrUpdateAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify) - { - var entity = _mapper.Map(from); - if (entity.Id == Guid.Empty) - { - return await InsertFromDTOAsync(from, autoSave, verify); - } - else - { - return await UpdateFromDTOAsync(from, autoSave, false, verify); - } - } - /// EF跟踪方式 生成 部分字段更新 (只更新传递的字段名 new[] {nameof(User.Name), nameof(User.Age)) public async Task UpdatePartialFieldsAsync(TEntity entity, string[] propertyNames, bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp[] verify) @@ -463,7 +459,6 @@ namespace IRaCIS.Core.Infra.EFCore #endregion - #region 稽查