Как реализовать SQLDependency с компонентом ASP.NET Core View и EntityFramework - PullRequest
0 голосов
/ 13 сентября 2018

Приветствие стека,

Я ищу руководство, чтобы исправить мою проблему, я создаю бесплатную демонстрационную версию для своей команды, чтобы продемонстрировать мощь 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, поскольку он не использует триггеры БД.

...