Я пытаюсь создать функцию, которая кэширует все содержимое таблицы базы данных из Entity Framework в кэш Redis на основе имени таблицы, передаваемого ей из другой функции в виде строки.
Это сделано для того, чтобы я мог собрать имена таблиц из любой модели платформы сущностей, а затем построить кеш всех этих таблиц, эффективно кешируя всю базу данных. Это на мультиплексоре Redis, и я использую настраиваемую генерацию поискового кэша на Redis, которую я хочу продолжать использовать для этого - поэтому я хочу, чтобы каждое поле таблицы можно было также получать в виде строки.
Я попытался обратиться к контексту базы данных как к типу и адресовать его через строку, однако ни один из них не сработал. Похоже, что Entity Framework презирает отсутствие жестко закодированных имен таблиц и т. Д.
public static ViewModels.Common.Alert RedisCacheTbx(/* DatabaseContext,*/ string DatabaseTable, DateTime CacheStartTime)
{
ViewModels.Common.Alert alert = new ViewModels.Common.Alert();
///Verify that this type can be disposed of for the using statement.
//if (DatabaseContext.IsAssignableFrom(typeof(IDisposable)))
//{
using(InspectionEntities context = new InspectionEntities())
{
string tablename = String.Format("context.{0}", DatabaseTable);
Type Table = Type.GetType(tablename);
if (Table != null)
{
//var query = (from a in Table where a.date_modify > CacheStartTime select a);
}
}
//}
return alert;
}
Я получаю непреодолимую ошибку при попытке запустить код для тестирования, однако я ожидаю, что запрос будет возвращаться как обычный запрос структуры среды - то есть, в основном, как список объектов.
Основное различие между предложенным ответом и тем, который я хочу использовать, заключается в том, что я не обязательно буду знать структуру таблицы, из которой я получаю данные, - следовательно, поэтому я бы предпочел использовать для этого структуру сущностей. , так что я могу вытащить его в объект, который уже был сгенерирован EF для этой таблицы. В противном случае я столкнусь с некоторыми довольно существенными проблемами.