Esempio n. 1
0
        public void Delete(DomainType aggregate)
        {
            repository.Delete(aggregate);

            //удаляем указатель
            CachedCollection.RemovePointer(GetItemCachedKey(aggregate));
            Store(CachedCollectionKey, cachedCollection);

            //удаляем из кеша сам объект
            cacheStorage.Remove(GetItemCachedKey(aggregate));
        }
Esempio n. 2
0
        public IQueryable <DomainType> GetAll(Expression <Func <DomainType, bool> > predicate = null)
        {
            //находим сущности в кеше
            var cachedItems = (predicate != null)
                ? CachedCollection.GetItems(cacheStorage).Where(predicate).AsEnumerable()
                : CachedCollection.GetItems(cacheStorage).AsEnumerable();

            //делаем выборку из репозитория, исключая те сущности, что уже есть в кеше
            var repoItems = cachedItems.Union((predicate == null) ? repository.GetAll() : repository.GetAll(predicate));

            //сохраняем выборку в кеше
            StoreItems(repoItems);

            return(repoItems.AsQueryable());
        }
Esempio n. 3
0
        public DomainType Get(Expression <Func <DomainType, bool> > predicate)
        {
            //делаем выборку из кешированных данных
            var item = CachedCollection.GetItems(cacheStorage).Where(predicate).FirstOrDefault();

            if (item == null)
            {
                //обращаемся к репозиторию
                item = repository.Get(predicate);

                if (item != null)
                {
                    StoreItem(item);
                }
            }

            return(item);
        }