我正在使用asp.net MVC5和asp.net Identity v2(来自夜间发布),但我认为此问题仍适用于Identity V1。
我有一个会员制系统,我正在通过
我想知道缓存MembershipUser记录的最佳方法,让其在请求的生命周期内保持不变。这样做的好处是:
或者这样做:
我有一个会员制系统,我正在通过
membershipuser
表中的AspUserId
字段将AspNetUser
实体链接到我的membershipuser
实体。public partial class membershipuser
{
public int id { get; set; }
public string full_name { get; set; }
public string address { get; set; }
public string AspNetUserId { get; set; }
.....
}
我想知道缓存MembershipUser记录的最佳方法,让其在请求的生命周期内保持不变。这样做的好处是:
public static class extensions
{
public static membershipuser GetMember(this System.Security.Principal.IPrincipal User)
{
string currentUserId = User.Identity.GetUserId();
return new MemberEntities().membershipusers.FirstOrDefault(m => m.AspNetUserId == currentUserId );
}
}
或者这样做:
public abstract partial class BaseController : Controller
{
private membershipuser _Member;
public membershipuser Member
{
get {
if(_BASRaTMember == null)
{
string currentUserId = User.Identity.GetUserId();
BASRaTMember = new BasratEntities().tbl_basrat_members.FirstOrDefault(m => m.AspNetUserId == currentUserId );
}
return _BASRaTMember;
}
private set { _BASRaTMember = value; }
}
}
我认为最好使用BaseController方法,因为如果我调用扩展方法5次以检查成员属性,那么它将会查询用户数据库5次。或者是更好的方法是将其存储在请求中吗?我的唯一目的是在用户经过身份验证后减少请求的数据库查找。