我有一个从缓存中检索的模型,我在几个页面上都使用了这个模型。模型的一部分有一个名为Breadcrumb的属性--它是面包屑元素的集合,并按如下方式更新:
model.Breadcrumbs.Add(UrlUtilities.Urls.DesignerJoinConfirmation, "Feedback Confirmation", "Thank you for your feedback");我的问题是,即使我要从缓存中取回模型,当我从缓存返回后添加另一个面包屑时(例如对于子页面,我会将最新的页面添加到末尾),然后它将更新缓存的模型。是否有更新模型而不更新缓存的方法?
我尝试创建一个临时模型,并将缓存的对象重新分配给它,如下所示:
Model model = GetCachedModel();
Model tempModel = new Model();
tempModel = model;然后更新tempModel,但这也会更新缓存的对象。我发现阻止缓存对象更新的唯一方法是创建tempModel,然后将每个属性与缓存模型分开重新分配,但如果每次都必须重新分配所有属性,这肯定会否定缓存的必要性。是否有更简单的方法来更新缓存对象而不更新缓存本身?
发布于 2014-01-02 10:54:04
我认为您将对对象的引用与对象混合在一起。当您从缓存中检索模型时,您实际上只获得了对缓存所引用的同一个对象的另一个引用。因此,通过引用所做的任何更改也将通过任何其他引用可见。
有两种方法可以避免这种情况:
(也有使用值类型的选项-它们是复制的而不是引用的-但是良好的实践是:(1) vale类型应该很小(不是很多字段),(2)不可变。
模型模型= GetCachedModel();模型tempModel =新模型();tempModel =模型;
那是行不通的。您正在创建对新实例(tempModel)的引用,然后用缓存中对原始实例的引用覆盖该引用。
https://stackoverflow.com/questions/20881082
复制相似问题