Как кэшировать объект с несколькими ключами в C#C#

Место общения программистов C#
Anonymous
Как кэшировать объект с несколькими ключами в C#

Сообщение Anonymous »

У меня есть модели, уникальные по двум или более свойствам. Например, объекты класса Entity уникальны как по имени, так и по идентификатору.

Код: Выделить всё

public class Entity
{
public int Id { get; set; }
public string Name { get; set; }
}
И у меня есть репозиторий для модели:

Код: Выделить всё

public class EntityRepository
{
...
public Entity GetById(int id)
{
return db.GetById(id);
}
public Entity GetByName(string name)
{
return db.GetByName(name);
}
}
Каков наилучший способ кэширования вызовов GetById и вызовов GetByName с помощью Microsoft.Extensions.Caching.Memory.IMemoryCache

Каков наилучший способ кэширования вызовов GetById и вызовов GetByName с помощью Microsoft.Extensions.Caching.Memory.IMemoryCache

Каков наилучший способ кэширования вызовов GetById и вызовов GetByName с помощью Microsoft.Extensions.Caching.Memory.IMemoryCache

Каков наилучший способ кэширования вызовов GetById и вызовов GetByName с помощью Microsoft.Extensions.Caching.Memory.IMemoryCache

code>?

Текущее решение:

Код: Выделить всё

public class EntityRepository
{
...
public Entity GetById(int id)
{
return Cache.GetOrCreate($"id:{id}", cacheEntry =>
{
return db.GetById(id);
});
}
public Entity GetByName(string name)
{
return Cache.GetOrCreate($"name:{name}", cacheEntry =>
{
return db.GetByName(name);
});
}
public void RemoveById(int id)
{
db.RemoveById(id);
Cache.Remove($"id:{id}");
}
}
Проблема в том, что если я удалю объект по его идентификатору, я смогу удалить его из кеша по идентификатору, но он все равно будет существовать с другим ключ. Аналогичная проблема возникает и с обновлением сущностей.

Есть ли лучшее решение, чем дважды сохранить объект в кеше?

Подробнее здесь: https://stackoverflow.com/questions/591 ... in-c-sharp

Вернуться в «C#»