缓存静态变量中的结果

时间:2012-07-03 12:20:16

标签: asp.net entity-framework caching entity-framework-4 static

我正在使用Linq查询使用实体框架从SQL服务器检索实体。当我更新权利时,EF正在缓存结果。我怀疑这是因为ObjectContext是一个静态变量(下图)。使用下面的代码刷新数据的唯一方法是调用方法并在可能显示过时数据时将_db设置为null(例如:在GridView中)。有没有办法阻止它缓存,或添加某种结束请求处理程序来调用我的数据层上的这个方法,而不是需要检测何时可能显示陈旧的数据?

private static ServiceEntities _db;
protected static ServiceEntitiesDb
    {
        get
        {
            if (_db == null)
            {
                _db = new ServiceEntities();
                _db.Contacts.MergeOption = MergeOption.OverwriteChanges; // failed
            }
            return _db;
        }
    }

    public static IEnumerable<Contact> GetContactsByName(string name) {
        var items = Db.Contacts;
        var filteredName = items.Where(i => (i.Name??string.Empty).IndexOf(name) >=0);
        return filteredName;
    }

1 个答案:

答案 0 :(得分:0)

稍微详细的解决方案(我想避免)是将它包装在一个使用块中。即:

public static IEnumerable<Contact> GetContactsByName(string name) {
        var items = Db.Contacts;
        var filteredName = items.Where(i => (i.Name??string.Empty).IndexOf(name) >=0);
        return filteredName;
}

变为

public static IEnumerable<Contact> GetContactsByName(string name) {
    using (var db = new SomeContext()) {
        var items = db.Contacts;
        var filteredName = items.Where(i => (i.Name??string.Empty).IndexOf(name) >=0);
        return filteredName;
    }
}