我有一个控制器动作,我正在执行一些工作(例如下面)
public ActionResult Dashboard()
{
// Redirect back to login page if not authenticated
if (!this.HttpContext.User.Identity.IsAuthenticated)
{
return this.RedirectToAction(string.Empty, "Account");
}
this.ApplicationDbContext = new ApplicationDbContext();
this.UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(this.ApplicationDbContext));
var user = this.UserManager.FindById(this.User.Identity.GetUserId());
MyRitualDashboardData model = new MyRitualDashboardData();
Member member = db.Members.Single(m => m.AspNetUserId == user.Id);
model.Gravatar = string.Format("<img src='{0}' class='gravatar img-circle'/>", user.PhotoUrl);
model.UserMember = member;
model.UserHomeLocation = member.getUserHomeLocation();
model.UserActiveMembership = member.getActiveMembership();
model.UserPastMemberships = member.getExpiredMemberships();
model.UserPayments = member.getUserPayments();
model.UserStatistics = member.GetMembershipStatistics();
if (model.UserActiveMembership != null)
{
model.DaysTillMembershipExpiry = member.getActiveMembership().daysTillExpiry();
}
return this.View(model);
}
如果我运行此代码并使用其他一些操作对数据库执行某些更改,那么当我刷新仪表板时,我对成员配置文件所做的各种更新都没问题。
但是,如果我尝试重新考虑我的代码并将上面的代码放入一个单独的类中,并使用静态方法来执行这样的调用:
public ActionResult Dashboard()
{
// Redirect back to login page if not authenticated
if (!this.HttpContext.User.Identity.IsAuthenticated)
{
return this.RedirectToAction(string.Empty, "Account");
}
this.ApplicationDbContext = new ApplicationDbContext();
this.UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(this.ApplicationDbContext));
var user = this.UserManager.FindById(this.User.Identity.GetUserId());
MyRitualDashboardData model = new MyRitualDashboardData();
model = MyRitualService.GetModelForMyRitual(user);
return this.View(model);
}
并且在一个单独的类中有一个方法,如下所示:
public static MyRitualDashboardData GetModelForMyRitual(ApplicationUser user)
{
MyRitualDashboardData model = new MyRitualDashboardData();
Member member = db.Members.Single(m => m.AspNetUserId == user.Id);
model.Gravatar = string.Format("<img src='{0}' class='gravatar img-circle'/>", user.PhotoUrl);
model.UserMember = member;
model.UserHomeLocation = member.getUserHomeLocation();
model.UserActiveMembership = member.getActiveMembership();
model.UserPastMemberships = member.getExpiredMemberships();
model.UserPayments = member.getUserPayments();
model.UserStatistics = member.GetMembershipStatistics();
if (model.UserActiveMembership != null)
{
model.DaysTillMembershipExpiry = member.getActiveMembership().daysTillExpiry();
}
return model;
}
然后它正在使用数据库中的缓存数据,我不知道为什么?为什么在操作中调用内联的相同代码会很好,但是当从单独的静态函数调用它时,它会缓存数据。
任何线索都会很棒。
由于
答案 0 :(得分:1)
两个版本都有行
Member member = db.Members.Single(m => m.AspNetUserId == user.Id);
但由于现在它在2个不同的类中,因此它必须是2个不同的db
s
第二个是静态的,会活得更长(即永不刷新)。
static
。两个类中的分离是一个好主意,但只是创建实例。