【发布时间】:2017-03-28 15:09:14
【问题描述】:
我有一个 Asp.Net Core + EF Core REST 服务。我为要调用 SP 的数据库创建了一个 DbContext 类。该方法看起来很像:
public IQueryable<xxx> Getxxxs()
{
return Set<xxx>().FromSql("pr_Getxxx");
}
这一切都有效,但每次调用 SP 没有任何意义,因为 SP 返回的数据很少更改。我想让数据过时,比如每 24 小时一次。
在 Core 中是否有首选模式?我看到他们有 .AddCaching 扩展方法,但这似乎会被注入控制器?那么它的控制器工作是缓存吗?我假设它是线程安全的,所以我不需要做任何锁定或类似的事情?似乎是一种竞争条件,如果一个线程正在检查项目是否加载到缓存中,另一个可能正在插入它,等等?
【问题讨论】:
-
你能请别再叫它EF7了。这个名字在 6 个月内没有正式使用。它称为 EntityFramework Core,版本为 1.0,以表明它不是 EF6 的下一个版本。请在此处查看此公告hanselman.com/blog/…
-
该服务是永久运行还是仅在调用后才运行并终止?您需要以某种方式缓存结果和上次从数据库访问数据的时间的时间戳。然而,数据库应该/可能自己做很多这种缓存的东西。
-
@ThomasRoskop,服务一直在运行。 Core 的工作方式、控制器和上下文在每次调用时都是新的。他们有可以在 X 时间后过期的 MemoryCache。它似乎对竞争条件开放。
标签: c# asp.net-core entity-framework-core