如何使用ASP.NET Core View组件和EntityFramework实现SQLDependency

时间:2018-09-13 18:18:24

标签: entity-framework-6 asp.net-core-2.1 sqldependency

向堆栈致意

我寻求解决问题的指导,我正在为我的团队构建一个一次性演示,以展示SQLdependency,部分页面缓存和查看组件的功能。我承认这是我第一次真正地深入ASP.NET CORE和实体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在ViewComponents上不使用OutputCache。而且ResponseCache没有sqldependency作为参数。

我最终将使用SignalR在家庭控制器上调用一个方法以返回viewComponent并覆盖表所在的div。

因此,鉴于以上所述,我将如何刷新缓存?我已经看过SQLDependency,SQLCacheDependency,SQLTableDependency和SQLDependencyEx。我希望使用内置的SQLDependency,因为它不使用数据库触发器。

0 个答案:

没有答案