使用 IQueryables 的缓存策略

发布于 2024-08-02 21:47:50 字数 634 浏览 4 评论 0 原文

我已经思考了一段时间如何最好地缓存 IQueryables。我正在使用存储库模式将数据获取到一个类中,例如这个类:

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IQueryable<Category> { get; set; } // For simplicity. It is actually a LazyList<Category> containing an IQueryable
}

现在我最好如何缓存这个对象?我想保留可查询的延迟执行,因为实际上除了类别之外还有很多东西可以链接到该项目,并且我最好不要获取它们来存储在对象上,因为对象可能变得太大,或者它们可能需要单独缓存。

我正在考虑 编译查询 可以以某种方式使这成为可能,我只是不太明白如何实现。有没有人找到任何好的解决方案?这似乎是一种非常常见的使用模式。

I have been pondering for a while how to best cache IQueryables. I am using a repository pattern to fetch data into a class such as this one:

public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IQueryable<Category> { get; set; } // For simplicity. It is actually a LazyList<Category> containing an IQueryable
}

Now how would I best go about to cache this object? I would like to keep the deferred execution on the queryable as in reality there are many more things besides Category that can be linked to the item, and I would preferably not fetch them to store on the object as the objects can get too big, or they could need to be cached separately.

I am thinking a Compiled Query could make this possible somehow, I'm just not quite seeing how. Has anyone found any good solution to this? It seems to be a pretty common pattern to use.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼角的笑意。 2024-08-09 21:47:50

使用已编译的查询,您可以缓存 Func> 类型的结果委托。每当您需要新的可查询时,只需创建一个新的数据上下文以传递到委托中,并像平常一样对生成的 IQueryable 进行查询。

Using a compiled query, you would cache the resulting delegate, of type Func<MyDataContext, IQueryable<Category>>. Whenever you want a new queryable, you just create a new data context to pass into the delegate and query against the resulting IQueryable<Category> like normal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文