Я собираюсь опубликовать другой ответ, так как вы, кажется, не можете разрешить все запросы через гибридное соединение.Однако выполнимость этого действительно зависит от объема данных и от того, как часто они меняются.
Вы можете легко кэшировать объекты в память при запуске.Поэтому, когда ваше приложение запускается, оно попадает в базу данных и заполняет эти коллекции.Затем ваши фактические контроллеры API будут запрашивать эти коллекции, а не базу данных.Это довольно стандартный подход для небольших, в основном статических данных, но, конечно, небольших объемов данных, которые часто меняются.
Потенциальные проблемы:
- Можете ли вы разумно поместить все эти данныев память?
- Вам когда-нибудь понадобится масштабировать API?Если это так, теперь вам нужно несколько копий данных в памяти, в нескольких местах.
- Как часто данные изменяются?Если есть какие-либо изменения, вам нужно будет сделать недействительными данные в памяти и перезагрузить их из базы данных.
Еще один способ нарезать его - не загружать его при запуске, а отслеживатькакие объекты были загружены, так что первый запрос может инициировать загрузку.
Однако, как я уже говорил в своем первом ответе, я действительно попытался бы доказать, что гибридное соединение является проблемой, прежде чем делать что-то подобное.Но это способ выполнить то, что вы, кажется, хотите сделать.
ОБНОВЛЕНИЕ :
Основываясь на вашем комментарии, вот общая идея: где-то в вашемстартовый код, вы бы вызвали метод для заполнения ваших коллекций сущностей.Это могут быть просто общие списки, содержащиеся в классе, что-то вроде этого:
// in your startup code
EntityRepository.SaturateEntities();
...
// here is the entity repo
public class EntityRepository
{
public static List<SomeEntity> SomeEntities { get; private set; }
public static List<SomeOtherEntity> SomeOtherEntities { get; private set; }
public static void SaturateEntities()
{
// _db is assumed to be your entity framework context
// ToList() will actually execute the query and return the results
SomeEntities = _db.SomeEntities.ToList();
SomeOtherEntities = _db.SomeOtherEntities.ToList();
}
}
Теперь в ваших контроллерах API вы будете запрашивать списки в EntityRepository вместо запроса контекста данных.Есть много разных способов сделать это, но, надеюсь, это даст вам общее представление.Также, вместо загрузки всех при запуске, вы можете подождать до первого запроса.Таким образом, хранилище будет просто отслеживать, какие списки уже инициализированы, и загружать их только тогда, когда они необходимы.