我创建了一个视图模型,然后返回到我的视图。此视图模型未缓存。但是,视图模型包含缓存的“类别”类型列表。
我执行通常的“如果在缓存中检索并返回。如果不在缓存中则检索数据,存储在缓存中并将视图模型返回”给控制器。这按预期工作。
我的问题是在我将视图模型从控制器返回到视图之前,我想更新类别列表中的记录,但仅适用于调用它的页面(不适用于调用它的所有用户/页面)。当我这样做时,它会自动更新缓存中的类别列表,我不希望它这样做。我只插入一次缓存,所以不明白为什么当我从缓存中检索到列表后更新列表时,更改会立即反映在缓存中。
这可能是我误解了 OO / Cache 的工作原理,但我希望有人可以让我直截了当吗?
我控制器中的代码...
var vm = new FsmViewModel();
if(vm.ActiveCategoryId > 0)
vm.Categories.Find(c => c.Category_ID == vm.ActiveCategoryId).ActiveBootstrapCss = "active";
上面的代码还更新了我存储在缓存中的类别列表?我正在使用代理模式从缓存或数据库中填充类别列表。
ObjectCache cache = MemoryCache.Default;
_categories = (List<Category>)cache[CacheForCategories];
if (_categories != null) return _categories;
// Cache does not exist so create
var policy = new CacheItemPolicy {AbsoluteExpiration = DateTimeOffset.Now.AddHours(4)};
_categories = base.GetAllCategories();
cache.Add(CacheForCategories, _categories, policy);
return _categories;
_categories 返回到从缓存或数据库中提取的视图模型,并在我的视图模型对象中定义为
public List<Category> Categories { get; set; }
有人可以让我知道我在这里做错了什么吗?
谢谢,
保罗