gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 5 数据缓存 - 行为不符合我的预期

转载 作者:行者123 更新时间:2023-12-01 11:36:44 26 4
gpt4 key购买 nike

我创建了一个 View 模型,然后返回到我的 View 。此 View 模型未缓存。但是, View 模型包含一个缓存的“类别”类型列表。

我执行通常的“如果在缓存中检索并返回。如果不在缓存中则检索数据,存储在缓存中并返回” View 模型到 Controller 。这按预期工作。

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

这可能是我误解了 OO/缓存的工作原理,但我希望有人能帮我弄清楚吗?

我 Controller 中的代码...

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 返回到我从缓存或数据库中提取的 View 模型,并在我的 View 模型对象中定义为

public List<Category> Categories { get; set; }

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

谢谢,

保罗

最佳答案

你没有做错任何事。这就是缓存开箱即用的方式。它持有一个对象的引用而不是它的副本。因此,如果您从缓存中加载一个对象,那么它基本上是同一个对象,因为您只会收到对它的引用。

你可以制作一个deep copy of your object在将其保存在缓存中之前避免这种行为。

关于asp.net-mvc - ASP.NET MVC 5 数据缓存 - 行为不符合我的预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26220846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com