小编use*_*653的帖子

实体更改后更新 IMemoryCache

我有一个用于根据密钥创建缓存的CacheService方法。GetOrCreateAsync我正在缓存一个具有属性的照片实体byte[]。这可以很好地缓存并按预期检索。但是,如果更新照片实体,缓存仍然保留旧实体,如您所料,因为它尚未过期,如何在保存该实体时强制更新缓存?我是否需要删除现有的缓存实体并重新添加更新的实体?

FromCacheAsync我的方法示例CacheService

    public async Task<T> FromCacheAsync<T>(string entityName, int clientId, Func<Task<T>> function)
    {
        string cacheKey = GetClientCacheKey(entityName, clientId, function);

        if (!_cache.TryGetValue(cacheKey, out T entry))
        {
            async Task<T> factory(ICacheEntry cacheEntry)
            {
                return await function();
            }
            return await _cache.GetOrCreateAsync(cacheKey, factory);
        }

        return entry;
    }
Run Code Online (Sandbox Code Playgroud)

这是使用缓存的示例。

      var existingPhotograph = await _cacheService.FromCacheAsync(nameof(_context.Photograph), clientId, async () =>
            await _photographRepository.GetByStaffIdAsync(staff.StaffId));
Run Code Online (Sandbox Code Playgroud)

c# caching entity-framework asp.net-core-mvc asp.net-core

5
推荐指数
1
解决办法
7657
查看次数

通用存储库包含和过滤

我创建了一个通用存储库。目前我有一个 StaffRepository 继承自我的通用库(Repository)。这很有效,因为我的通用存储库具有 CRUD 操作,并允许我在我的服务中使用这些操作以及 StaffRepository 中的方法,该方法对上下文进行额外的过滤并添加包含。但是,我需要为每个实体创建一个存储库(大多数按 ClientId 和主键进行过滤)。有没有一种方法可以使用通用方法来过滤和应用包含?我在这里应用的方法是否正确?感谢您的帮助。

StaffRepository 示例:

 public class StaffRepository : Repository<Staff>
{
    public StaffRepository(ApplicationDbContext _context) : base(_context)
    {
    }

    public async Task<List<Staff>> GetAsync(int clientId)
    {
        return await _context.Staff
            .Include(s => s.Person)
            .Include(u => u.Person.User)
            .Include(p => p.Photograph)
            .Where(x => x.ClientId == clientId)
            .ToListAsync();
    }

    public async Task<Staff> GetByIdAsync(int clientId, int staffId)
    {
        return await _context.Staff
            .Include(s => s.Person)
            .Include(u => u.Person.User)
            .FirstOrDefaultAsync(x => x.ClientId == clientId && x.StaffId == staffId);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的通用存储库:

public class …
Run Code Online (Sandbox Code Playgroud)

c# generics asp.net-mvc entity-framework

2
推荐指数
1
解决办法
7842
查看次数