Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 母版页属性和性能_C#_Asp.net_Asp.net Membership - Fatal编程技术网

C# 母版页属性和性能

C# 母版页属性和性能,c#,asp.net,asp.net-membership,C#,Asp.net,Asp.net Membership,我使用ASP.NET成员身份,我有一个名为UserProfiles的表,它在UserId上与aspnet_用户有1:1的关系,以存储大量额外字段。其中一个字段是OrganizationID,它将在几乎每个页面上与常规角色一起用于授权目的 因此,我需要经常检查登录用户的OrganizationID。我不想为此使用会话,我宁愿使用成员资格cookie并每次调用数据库 在站点的母版页上具有以下属性会对性能造成多大影响: public UserProfile loggedInUser { get

我使用ASP.NET成员身份,我有一个名为UserProfiles的表,它在UserId上与aspnet_用户有1:1的关系,以存储大量额外字段。其中一个字段是OrganizationID,它将在几乎每个页面上与常规角色一起用于授权目的

因此,我需要经常检查登录用户的OrganizationID。我不想为此使用会话,我宁愿使用成员资格cookie并每次调用数据库

在站点的母版页上具有以下属性会对性能造成多大影响:

public UserProfile loggedInUser
{
    get
    {
        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {
            if (Membership.GetUser() != null)
            {
                Guid userId = (Guid)Membership.GetUser().ProviderUserKey;
                using (var db = new DatabaseContext())
                {
                    return db.UserProfiles.Where(l => l.UserId == userId).FirstOrDefault();
                }
            }
        }
        return null;
    }
}

网站规模不大,流量也不会很大。这是一种可以考虑的方法吗?

您可以使用.Find而不是.Where,这通常与您的示例类似

我怀疑这会有什么不同,因为你每次都在创造一个新的环境。如果是我,我可能会尝试通过依赖项注入,使用每个webrequest生命周期或类似生命周期,然后使用Find来注入DbContext。这样,如果您多次使用此属性,开销将大大减少


我很好奇,为什么不使用会话变量呢?您是否担心会议规模过大?正如您所说,这不是一个庞大的网站,这是一个按用户的模式。

欣赏这些见解。我会拉小提琴,过一会儿再来。我只是不相信会话——通常将其作为最后手段使用——与会话的大小无关。