bev*_*qua 5 c# sql caching entity-framework
我想要的是概念上非常简单,但我无法弄清楚如何最好地实现这样的事情.
在我的Web应用程序中,我有访问存储库的服务,这些存储库访问与SQL Server数据库交互的EF.所有这些都是每个Web请求实例一次.
我想在存储库和EF(或服务和存储库?)之间有一个额外的层,它静态地跟踪从数据库中提取和推送到数据库的对象.
假设数据库访问仅通过应用程序完成,目标就是我们知道一个事实,即除非某些存储库访问EF并提交更改,否则对象集并没有真正改变.
一个例子是:
存储库调用方法 GetAllCarrots();
GetAllCarrots()执行查询SQL Server检索一个List<Carrot>,如果之间没有其他任何事情发生,我想防止这个查询每次都在SQL Server上实际进行(无论它是在不同的Web请求,我希望能够处理那个场景)
现在,如果调用BuyCarrot()将a添加Carrot到表中,那么我希望它使Carrots 的静态高速缓存无效,这将GetAllCarrots();需要再次查询数据库.
有什么关于数据库缓存的好资源?
为此,您可以使用LinqToCache 。
它允许您在存储库中使用以下代码:
var queryTags = from t in ctx.Tags select t;
var tags = queryTags.AsCached("Tags");
foreach (Tag t in tags)
{
...
}
Run Code Online (Sandbox Code Playgroud)
这个想法是,当查询结果发生更改时,您可以使用SqlDependency来收到通知。只要结果不改变就可以缓存它。
LinqToCache跟踪您的查询并在查询时返回缓存的数据。当从 SqlServer 收到通知时,缓存将被重置。