向堆栈致意
我寻求解决问题的指导,我正在为我的团队构建一个一次性演示,以展示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,因为它不使用数据库触发器。