Приветствие стека,
Я ищу руководство, чтобы исправить мою проблему, я создаю бесплатную демонстрационную версию для своей команды, чтобы продемонстрировать мощь SQL-зависимости, частичного кэширования страниц и просмотра компонентов.Я признаю, что это мое первое настоящее погружение в ASP.NET CORE и Entity Framework CORE.Так что я использую viewcomponents, где мое зависание.
Этот проект представляет собой простой дамп данных на веб-страницу.У меня есть база данных с таблицей «Транспортные средства и детали» в отношениях «Многие ко многим».Я использую EntityFramwork для определения таблиц из базы данных первым подходом.Vehicles-Vehicle_Details-Details
Вот строки из index.html, которые важны.Команда cache фактически создает 5-минутный кеш.
<cache expires-after="@TimeSpan.FromMinutes(5)">
@await Component.InvokeAsync("VehicleTable");
</cache>
У меня есть компонент вида, определенный следующим образом.Атрибут ResponseCache НИЧЕГО не выполняет, но не выдает предупреждение, просто не вызывает кеш.
[ResponseCache(Duration=300)] // this line doesn't seem to do anything
public async Task<IViewComponent> InvokeAsync(){
IQueryable<ViewModel.Allinfo> = model;
using(var db=new DBContext()){
model = linq statement here;
return View("VehicleTable", model.toList());
}
}
Теперь мой кеш работает так, как определено выше.Я подключаюсь к БД, и мои данные появляются на экране для моего частичного просмотра.Но мне нужны мои данные, чтобы досрочно завершить кеш при обнаружении изменения данных.Если бы я использовал обычный ASP.NET MVC 6, я мог бы просто использовать следующий атрибут для действия controller .
[OutputCache(Duration = 500, SqlDependency = "db:table1,table2")]
Но я пытаюсь изучить ViewComponents, поскольку они могут быть независимыми от модели данных вызывающего представления.Что ж, ASP.NET CORE не использует OutputCache для ViewComponents.И ResponseCache не имеет sqldependency в качестве параметра.
В конечном итоге я буду использовать SignalR для вызова метода на моем домашнем контроллере, чтобы вернуть viewcomponent и перезаписать div, в котором находится таблица.
Итак, учитывая вышеизложенное, как мне обновитькэш?Я посмотрел на SQLDependency, SQLCacheDependency и SQLTableDependency, а также SQLDependencyEx.Я хочу использовать встроенный SQLDependency, поскольку он не использует триггеры БД.