DD.WellWorkover.Cloud/AsbCloudInfrastructure/Services/Cache/CacheDb.cs

52 lines
1.9 KiB
C#
Raw Normal View History

2021-07-21 15:29:19 +05:00
using Microsoft.EntityFrameworkCore;
using System.Linq;
using System.Collections.Concurrent;
2021-04-23 10:21:25 +05:00
using System.Collections.Generic;
using System;
using AsbCloudApp;
2021-04-07 18:01:56 +05:00
namespace AsbCloudInfrastructure.Services.Cache
{
public class CacheDb
2021-04-23 10:21:25 +05:00
{
private readonly ConcurrentDictionary<string, CacheTableDataStore> cache =
new ConcurrentDictionary<string, CacheTableDataStore>();
2021-04-07 18:01:56 +05:00
2021-12-21 11:52:53 +05:00
public CacheTable<TEntity> GetCachedTable<TEntity>(DbContext context, params string[] includes)
where TEntity : class
=> GetCachedTable<TEntity>(context, new SortedSet<string>(includes));
2021-12-21 11:52:53 +05:00
public CacheTable<TEntity> GetCachedTable<TEntity>(DbContext context, ISet<string> includes = null)
where TEntity : class
{
var cacheItem = GetCacheTableDataStore<TEntity>();
var tableCache = new CacheTable<TEntity>(context, cacheItem, includes);
return tableCache;
}
public CacheTable<TEntity> GetCachedTable<TEntity>(DbContext context, Func<DbSet<TEntity>, IQueryable<TEntity>> configureDbSet)
where TEntity : class
{
var cacheItem = GetCacheTableDataStore<TEntity>();
var tableCache = new CacheTable<TEntity>(context, cacheItem, configureDbSet);
return tableCache;
}
private CacheTableDataStore GetCacheTableDataStore<TEntity>()
2021-04-07 18:01:56 +05:00
where TEntity : class
{
var nameOfTEntity = typeof(TEntity).FullName;
var cacheItem = cache.GetOrAdd(nameOfTEntity, (nameOfTEntity) => new CacheTableDataStore
{
NameOfTEntity = nameOfTEntity,
Entities = new List<TEntity>(),
});
return cacheItem;
2021-04-07 18:01:56 +05:00
}
2021-04-23 10:21:25 +05:00
public void DropAll() => cache.Clear();
public void Drop<TEntity>() => cache.Remove(typeof(TEntity).FullName, out _);
2021-04-07 18:01:56 +05:00
}
}