我如何保持静态调用缓存在MVC
本文关键字:缓存 存在 MVC 调用 静态 何保持 | 更新日期: 2023-09-27 18:17:45
我设置了一个Configuration
模型,该模型存储了一组(本质上)Key =>值对,这些值对可以由最终用户编辑。
为了使事情更容易,我设置了一个静态AppSettings
类,以便在整个应用程序中更容易调用它们(配置值永远不会被最终用户创建或销毁,只会被修改)。
所以我们得到的是(注意-为了简洁起见,有些已经被删除了):
<<p> 初始化/strong>var configurations = new List<Configuration>
{
new Configuration{ Key="CurrentGameID", Value="1" },
new Configuration{ Key="AllowedStudentSpaces", Value="2" },
new Configuration{ Key="WelcomeMessage", Value="Howdy, users" },
};
configurations.ForEach(c => context.Configurations.Add(c));
context.SaveChanges();
辅助public static class AppSettings
{
private static MyContext db = new MyContext();
public static int CurrentGameID
{
get
{
var configuration = db.Configurations.FirstOrDefault(c => c.ID == (int)ConfigIDs.CurrentGame);
return Convert.ToInt32(configuration.Value);
}
}
public static int AllowedStudentSpaces
{
get
{
var configuration = db.Configurations.FirstOrDefault(c => c.ID == (int)ConfigIDs.AllowedStudentSpaces);
return Convert.ToInt32(configuration.Value);
}
}
public static string WelcomeMessage
{
get
{
var configuration = db.Configurations.FirstOrDefault(c => c.ID == (int)ConfigIDs.WelcomeMessage);
return configuration.Value;
}
}
}
enum ConfigIDs
{
CurrentGame = 1,
AllowedStudentSpaces = 2,
WelcomeMessage = 3
};
这应该允许我调用任何我需要做的事情,如:
<h1>@AppSettings.WelcomeMessage</p>
或
if(numSpaces < AppSettings.AllowedStudentSpaces)
{
// Do work
}
这工作得很好,但似乎我的应用程序喜欢缓存这些调用返回的值,当他们使用AppSettings类调用。更新的值不会出现,直到我已经清除了我的会话(通过使用不同的浏览器或其他东西)。是什么导致的呢?有办法绕过它吗?有没有比我现在做的更好的方法?
使用System.Web.Mvc.OutputCacheAttribute
,你可以创建一个自定义属性,像这样:
public class NoCacheAttribute : OutputCacheAttribute
{
public NoCacheAttribute()
{
Location = OutputCacheLocation.None;
NoStore = true;
Duration = 0;
VaryByParam = "None";
}
}
并将其应用于不应该使用缓存的控制器
您应该设置一种方法,在每次页面加载时使用新的DbContext。现在,Configuration
实体被附加到静态DbContext的本地,并且没有从数据库中重新加载。