Я пытаюсь создать веб-приложение asp.net mvc, некоторые страницы должны показывать данные в режиме реального времени, эти данные хранятся в базе данных SQL Server, данные меняются всегда, я создал хранимую процедуру на сервере sql, Я вызываю эту процедуру в своем контроллере, используя фреймворк Entity, и отправляю результат в браузер с помощью ajax i, используемого для вывода данных, чтобы свести к минимуму количество выполняемых хранимых процедур, в том же контроллере существует несколько методов, которые используют одну и ту же хранимую процедуру, каждый метод выполняет ту же процедуру, как повысить эффективность моего приложения, есть ли способ выполнить хранимую процедуру только один раз для всего контроллера?
это мой контроллер, моя цель - свести к минимуму использование базы данных
[OutputCache(Duration = 20, VaryByParam = "*")]
public class JobsETLController : Controller
{
private ETL_REP_MAUIEntities db = new ETL_REP_MAUIEntities();
public ObjectResult<BIOGetETLJobs_Result> ETLJobs;
public JobsETLController()
{
ETLJobs =db.BIOGetETLJobs();
}
public ActionResult Indexp()
{
var y = from xx in ETLJobs
where xx.etat!="Completed"
orderby xx.etat ascending
select xx;
return PartialView(y);
}
public ActionResult IndexpAll()
{
var y = from xx in ETLJobs
where xx.etat == "Completed"
select xx;
return PartialView(y);
}
Если ваш сервер не находится в веб-ферме (несколько серверов), вы можете кэшировать данные в кэше Asp.net (это не кеширование вывода, а кэширование данных). Вы просто устанавливаете 5-минутное ограничение по истечении срока действия данных (вы говорите, что данные должны обновляться каждые 5 минут), так что, когда контроллеру нужны данные, он сначала проверяет кеш, и если он там не будет, он выполнит хранимая процедура.
MyData items;
items = (MyData)Cache["MyData"];
if(items == null)
{
items = DoQueryToReturnItems();
Cache.Add("MyData", items, null, DateTime.Now.AddMinutes(5), ..);
}
Даже можно настроить элемент кэша на зависимость от SqlDependency, чтобы при изменении данных кеш мог быть обновлен.