小编Pau*_*ale的帖子

ASP.NET MVC 5数据缓存 - 不按预期运行

我有一个我创建的视图模型,然后返回到我的视图.此视图模型未缓存.但是,视图模型包含缓存的类型"类别"列表.

我做通常的"如果在缓存中检索并返回.如果不在缓存中则检索数据,存储在缓存中并将视图模型返回到控制器.这按预期工作.

我的问题就在我将视图模型从我的控制器返回到我的视图之前我想更新我的类别列表中的记录,但仅针对调用它的页面(不是所有用户/页面调用它).当我这样做时,它会自动更新缓存中的类别列表,我不希望它.我只插入一次缓存,所以不明白为什么当我从缓存中检索它后更新列表时,更改会立即反映在缓存中.

这可能是我误解了OO/Cache是​​如何工作的,但我希望有人可以让我直截了当吗?

我控制器中的代码......

var vm = new FsmViewModel();
if(vm.ActiveCategoryId > 0)
vm.Categories.Find(c => c.Category_ID == vm.ActiveCategoryId).ActiveBootstrapCss = "active";
Run Code Online (Sandbox Code Playgroud)

上面的代码还更新了我在缓存中存储的类别列表?我正在使用代理模式从缓存或数据库填充类别列表.

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;
Run Code Online (Sandbox Code Playgroud)

_categories返回到从缓存或db中提取的视图模型,并在我的视图模型对象中定义为

public List<Category> Categories { get; set; }
Run Code Online (Sandbox Code Playgroud)

有人可以让我知道我在这里做错了什么吗?

谢谢,

保罗

asp.net-mvc caching asp.net-mvc-5.2

3
推荐指数
1
解决办法
2258
查看次数

C#类是否知道实例化了哪个文件?

是否有可能告诉C#中实例化一个类的文件?

例如,如果我有Page1.cs和Page2.cs,myclass.cs中的构造函数可以知道哪个页面从中创建了一个对象?

c#

1
推荐指数
1
解决办法
114
查看次数

标签 统计

asp.net-mvc ×1

asp.net-mvc-5.2 ×1

c# ×1

caching ×1