缓存实体框架查询下一次回发的结果

时间:2015-06-06 17:41:48

标签: asp.net-mvc entity-framework caching

我有一个常见的场景,我在数据库中查询不同的值集,以填充给定表单中的某些下拉列表。

我有很多,并且需要4-5秒来检索每个下拉列表的值列表。

有什么方法可以在服务器上缓存这些信息,因为这种信息不会经常变化..

这是我的代码中要求值的一部分......

AvailablePaperSizes = i_Context.PaperSizes.ToList();
AvailablePaperTypes = i_Context.PaperTypes.ToList();
AvailablePaperColors = i_Context.PaperColors.ToList();

1 个答案:

答案 0 :(得分:3)

每个列表4-5秒?如果每个列表都适合下拉控件,我首先会尝试找出它为什么花了这么长时间。

在任何情况下,您都可以创建编译查询并将其存储在上下文类中的静态实例中。查询将在第一次访问时运行(可以放入Application_Start或类似),结果集存储在内存中。每次调用该方法时,都会查看结果集的内存,而不是查询数据库。

一个有用的辅助方法如下:

public partial class AppContext: ObjectContext
{
    private static readonly Func<AppContext, IEnumerable<PaperSizes>> pSizes = CompiledQuery.Compile(
        (AppContext context) => context.PaperSizes.ToList()
        );

    public IEnumerable<PaperSizes> GetAllPaperSizes() 
    {
        return pSizes.Invoke(this).ToList();
    }
 }

您可以按照以下方式使用它来填写下拉列表:

AvailablePaperSizes = i_Context.GetAllPaperSizes();

同样适用于所有其他系列。