public virtual async Task SaveChangesAsync(params OperationLog[] operationLogs) { if (operationLogs == null) { throw new ArgumentNullException(nameof(operationLogs)); } var pkMap = new PrimaryKeyResolvingMap(); using (var repository = _repositoryFactory()) { var ids = operationLogs.Where(x => !x.IsTransient()).Select(x => x.Id).Distinct().ToArray(); var existEntities = await repository.GetOperationLogsByIdsAsync(ids); foreach (var operation in operationLogs) { var existsEntity = existEntities.FirstOrDefault(x => x.Id == operation.Id); var modifiedEntity = AbstractTypeFactory <OperationLogEntity> .TryCreateInstance().FromModel(operation, pkMap); if (existsEntity != null) { modifiedEntity.Patch(existsEntity); } else { repository.Add(modifiedEntity); } } await repository.UnitOfWork.CommitAsync(); ChangeLogCacheRegion.ExpireRegion(); } }
public virtual async Task <ChangeLogSearchResult> SearchAsync(ChangeLogSearchCriteria criteria) { var cacheKey = CacheKey.With(GetType(), nameof(SearchAsync), criteria.GetCacheKey()); var result = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { cacheEntry.AddExpirationToken(ChangeLogCacheRegion.CreateChangeToken()); var searchResult = AbstractTypeFactory <ChangeLogSearchResult> .TryCreateInstance(); using (var repository = _repositoryFactory()) { repository.DisableChangesTracking(); var sortInfos = GetSortInfos(criteria); var query = GetQuery(repository, criteria, sortInfos); searchResult.TotalCount = await query.CountAsync(); if (criteria.Take > 0) { searchResult.Results = (await query.AsNoTracking().Skip(criteria.Skip).Take(criteria.Take).ToArrayAsync()).Select(x => x.ToModel(AbstractTypeFactory <OperationLog> .TryCreateInstance())).ToList(); } } return(searchResult); }); return(result); }
public virtual async Task DeleteAsync(string[] ids) { using (var repository = _repositoryFactory()) { var existEntities = await repository.GetOperationLogsByIdsAsync(ids); foreach (var entity in existEntities) { repository.Remove(entity); } await repository.UnitOfWork.CommitAsync(); ChangeLogCacheRegion.ExpireRegion(); } }
public void Reset() { ChangeLogCacheRegion.ExpireRegion(); }