Мое приложение генерирует много объектов, делая это. Объекты генерируются в результате запросов к базе данных и являются частью нашего решения ORM. Программы, использующие эти объекты, обычно запрашивают их одну за другой.
Я хочу использовать System.Runtime.Caching, но не знаю, как это сделать, поскольку у меня есть определенные критерии:
Каждый пользователь может войти в другую базу данных. Применяется для всех объектов.
Базы данных могут иметь несколько разных профилей компаний. Применяется для большинства объектов.
Большинство объектов многоязычны.
Некоторые объекты кэшируются только во время выполнения транзакции базы данных, а затем выгружаются при откате или фиксации.
Первое решение, которое приходит на ум, — сгенерировать сложный строковый ключ для кеша (т. е. значение первичного ключа базы данных + компании + языка + объекта), но я не уверен, что это правильный путь. Я также не уверен, как реализовать кэширование транзакций.
Возможно, у меня было бы больше контроля над кешем, если бы я использовал свою собственную реализацию. Что-то вроде этого:
public class DatabaseCache
{
private ConcurrentDictionary<string, ClassCache> m_databases = new ConcurrentDictionary<string, ClassCache>();
public void Add(string database, string className, object item, params string[] itemKeys)
{
}
}
public class ClassCache
{
private ConcurrentDictionary<string, KeyCache> m_cache = new ConcurrentDictionary<string, KeyCache>();
public void Add(string className, object item, params string[] itemKeys)
{
}
}
public class KeyCache
{
private ConcurrentDictionary<string, object> m_cache = new ConcurrentDictionary<string, object>();
public void Add(object item, params string[] itemKeys)
{
}
}