Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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();
            }
        }
Esempio n. 4
0
 public void Reset()
 {
     ChangeLogCacheRegion.ExpireRegion();
 }