本文介绍了被User.Identity.GetUserId缓存还是从数据库中每次取?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用ASP.Net MVC 5和我打电话的这条线都在我的代码



 字符串userid = User.Identity.GetUserId(); 



请问ASP.NET MVC去,从表中获取这个每个呼叫,或者它得到缓存?


解决方案

看来, ID 沿<$ C 用户名当你登录会被缓存。



> 和之后运行 User.Identity.GetUserId(); 提出的识别系统的没有查询以数据库



这是洛作出的查询:

  EXEC sp_executesql的N'SELECT 
[UnionAll2] [ C2〕的AS〔C1〕,
[UnionAll2]。[C3]的AS〔C2〕,
[UnionAll2]。[4] AS〔C3〕,
[UnionAll2]。[C5] AS [C4],
[UnionAll2]。[6] AS [C5],
[UnionAll2]。[C7] AS [6],
[UnionAll2]。[8] AS [ C7],
[UnionAll2]。[C9] AS [8],
[UnionAll2]。[C10] AS [C9],
[UnionAll2]。[C11] AS [C10] ,
[UnionAll2]。[12] AS [C11],
[UnionAll2]。[C13] AS [12],
[UnionAll2]。[14] AS [C13],
〔UnionAll2]。[C1] AS [14],
[UnionAll2]。[C15] AS [C15],
[UnionAll2]。[C16] AS [C16],
〔UnionAll2]。[C17] AS [C17],
[UnionAll2]。[C18] AS [18],
[UnionAll2]。[C19] AS [C19],
[ UnionAll2]。[20] AS [20],
[UnionAll2]。[C21] AS [C21],
[UnionAll2]。[C22] AS [22],
[UnionAll2] [C23] AS [C23],
[UnionAll2]。[C24] AS [C24],
[UnionAll2]。[C25] AS [C25]
FROM(SELECT
〔UnionAll1]。[C1] AS [C1],
[UnionAll1]。[AccessFailedCount] AS [C2],
[UnionAll1]。[ID] AS [C3],
[ UnionAll1]。[邮件] AS [4],
[UnionAll1]。[EmailConfirmed] AS [C5],
[UnionAll1]。[PasswordHash] AS [6],
[UnionAll1] [SecurityStamp] AS [C7],
[UnionAll1]。[******中国] AS [8],
[UnionAll1]。[PhoneNumberConfirmed] AS [C9],
[UnionAll1]。[ TwoFactorEnabled] AS [C10],
[UnionAll1]。[LockoutEndDateUtc] AS [C11],
[UnionAll1]。[LockoutEnabled] AS [12],
[UnionAll1]。[AccessFailedCount1] AS [C13],
[UnionAll1]。[用户名] AS [14],
[UnionAll1]。[用户ID] AS [C15],
[UnionAll1]。[角色ID] AS [ C16],
[UnionAll1]。[UserId1] AS [C17],
[UnionAll1]〔C2〕的AS [18],
[UnionAll1]。[C3] AS [C19] ,
[UnionAll1]。[4] AS [20],
[UnionAll1]。[C5] AS [C21],
[UnionAll1]。[6] AS [C22],
〔UnionAll1]。[C7] AS [C23],
[UnionAll1]。[8] AS [C24],
[UnionAll1]。[C9] AS [C25]
FROM(SELECT
CASE WHEN([Extent2]。[用户ID] IS NULL)THEN CAST(NULL AS INT)ELSE 1 END AS [C1],
[LIMIT1]。[AccessFailedCount] AS [AccessFailedCount] ,
[LIMIT1]。[ID] AS [ID],
[LIMIT1]。[邮件] AS [邮件],
[LIMIT1]。[EmailConfirmed] AS [EmailConfirmed],
〔LIMIT1]。[PasswordHash] AS [PasswordHash],
[LIMIT1]。[SecurityStamp] AS [SecurityStamp],
[LIMIT1]。[******中国] AS [******中国],
〔LIMIT1]。[PhoneNumberConfirmed] AS [PhoneNumberConfirmed],
[LIMIT1]。[TwoFactorEnabled] AS [TwoFactorEnabled],
[LIMIT1]。[LockoutEndDateUtc] AS [LockoutEndDateUtc],
[ LIMIT1]。[LockoutEnabled] AS [LockoutEnabled],
[LIMIT1]。[AccessFailedCount] AS [AccessFailedCount1],
[LIMIT1]。[用户名] AS [用户名],
[Extent2] [用户ID] AS [用户ID],
[Extent2]。[角色ID] AS [角色ID],
[Extent2]。[用户ID] AS [UserId1],
CAST(NULL AS INT )AS [C2],
CAST(NULL为varchar(1))AS [C3],
CAST(NULL为varchar(1))AS [4],
CAST(NULL AS VARCHAR(1))AS [C5],
CAST(NULL为varchar(1))AS [6],
CAST(NULL为varchar(1))AS [C7],
CAST(NULL为varchar(1))AS [8],
CAST(NULL为varchar(1))AS [C9]
FROM(SELECT TOP(1)
[Extent1。 [ID] AS [ID],
[Extent1]。[邮件] AS [邮件],
[Extent1]。[EmailConfirmed] AS [EmailConfirmed],
[Extent1]。[PasswordHash ] AS [PasswordHash],
[Extent1]。[SecurityStamp] AS [SecurityStamp],
[Extent1]。[******中国] AS [******中国],
[Extent1]。[PhoneNumberConfirmed] AS [PhoneNumberConfirmed],
[Extent1]。[TwoFactorEnabled] AS [TwoFactorEnabled],
[Extent1]。[LockoutEndDateUtc] AS [LockoutEndDateUtc],
[Extent1]。[LockoutEnabled] AS [LockoutEnabled ],
[Extent1]。[AccessFailedCount] AS [AccessFailedCount],
[Extent1]。[用户名] AS [用户名]
从[DBO]。[AspNetUsers] AS [Extent1]
,其中[Extent1]。[ID] = @ p__linq__0)AS [LIMIT1]
LEFT OUTER JOIN [DBO]。[AspNetUserRoles] AS [Extent2] ON [LIMIT1]。[ID] = [Extent2。 [用户ID]
UNION ALL
选择
2 AS [C1],
[LIMIT2]。[AccessFailedCount] AS [AccessFailedCount],
[LIMIT2]。[ID ] AS [ID],
[LIMIT2]。[邮件] AS [邮件],
[LIMIT2]。[EmailConfirmed] AS [EmailConfirmed],
[LIMIT2]。[PasswordHash] AS [PasswordHash],
[LIMIT2]。[SecurityStamp] AS [SecurityStamp],
[LIMIT2]。[******中国] AS [******中国],
[LIMIT2]。[PhoneNumberConfirmed] AS [PhoneNumberConfirmed ],
[LIMIT2]。[TwoFactorEnabled] AS [TwoFactorEnabled],
[LIMIT2]。[LockoutEndDateUtc] AS [LockoutEndDateUtc],
[LIMIT2]。[LockoutEnabled] AS [LockoutEnabled]
[LIMIT2]。[AccessFailedCount] AS [AccessFailedCount1],
[LIMIT2]。[用户名] AS [用户名],
CAST(NULL为varchar(1))AS [C2]
CAST(NULL为varchar(1))AS [C3],
CAST(NULL为varchar(1))AS [4],
[Extent4]。[ID] AS [Id1的],
[Extent4]。[用户ID] AS [用户ID],
[Extent4]。[ClaimType] AS [ClaimType],
[Extent4]。[ClaimValue] AS [ClaimValue]
CAST(NULL为varchar(1))AS [C5],
CAST(NULL为varchar(1))AS [6],
CAST(NULL为varchar(1))AS [C7],
CAST(NULL为varchar(1))AS [8]
FROM(SELECT TOP(1)
[Extent3]。[ID] AS [ID],
[Extent3]。[邮件] AS [邮件],
[Extent3]。[EmailConfirmed] AS [EmailConfirmed],
[Extent3]。[PasswordHash] AS [PasswordHash],
[Extent3]。[SecurityStamp] AS [SecurityStamp],
[Extent3]。[******中国] AS [******中国],
[Extent3]。[PhoneNumberConfirmed] AS [PhoneNumberConfirmed],
[Extent3 ]。[TwoFactorEnabled] AS [TwoFactorEnabled],
[Extent3]。[LockoutEndDateUtc] AS [LockoutEndDateUtc],
[Extent3]。[LockoutEnabled] AS [LockoutEnabled],
[Extent3。 [AccessFailedCount] AS [AccessFailedCount],
[Extent3]。[用户名] AS [用户名]
从[DBO]。[AspNetUsers] AS [Extent3]
WHERE [Extent3]。[ID ] = @ p__linq__0)AS [LIMIT2]
INNER JOIN [DBO]。[AspNetUserClaims] AS [Extent4] ON [LIMIT2]。[ID] = [Extent4]。[用户ID])AS [UnionAll1]
UNION ALL
选择
3 AS [C1],
[Limit3]。[AccessFailedCount] AS [AccessFailedCount],
[Limit3]。[ID] AS [ID]
[Limit3]。[邮件] AS [邮件],
[Limit3]。[EmailConfirmed] AS [EmailConfirmed],
[Limit3]。[PasswordHash] AS [PasswordHash],
[Limit3]。[SecurityStamp] AS [SecurityStamp],
[Limit3]。[******中国] AS [******中国],
[Limit3]。[PhoneNumberConfirmed] AS [PhoneNumberConfirmed],
[Limit3]。[TwoFactorEnabled] AS [TwoFactorEnabled],
[Limit3]。[LockoutEndDateUtc] AS [LockoutEndDateUtc],
[Limit3]。[LockoutEnabled] AS [LockoutEnabled],
[Limit3 ]。[AccessFailedCount] AS [AccessFailedCount1],
[Limit3]。[用户名] AS [用户名],
CAST(NULL为varchar(1))AS [C2],
CAST( NULL为varchar(1))AS [C3],
CAST(NULL为varchar(1))AS [4],
CAST(NULL AS INT)AS [C5],
CAST (NULL为varchar(1))AS [6],
CAST(NULL为varchar(1))AS [C7],
CAST(NULL为varchar(1))AS [8],
〔Extent6]。[LoginProvider] AS [LoginProvider],
[Extent6]。[ProviderKey] AS [ProviderKey],
[Extent6]。[用户ID] AS [用户ID],
〔Extent6]。[用户ID] AS [UserId1]
FROM(SELECT TOP(1)
[Extent5]。[ID] AS [ID],
[Extent5]。[邮件] AS [发送电子邮件],
[Extent5]。[EmailConfirmed] AS [EmailConfirmed],
[Extent5]。[PasswordHash] AS [PasswordHash],
[Extent5]。[SecurityStamp] AS [ SecurityStamp],
[Extent5]。[******中国] AS [******中国],
[Extent5]。[PhoneNumberConfirmed] AS [PhoneNumberConfirmed],
[Extent5]。[TwoFactorEnabled] AS [TwoFactorEnabled] ,
[Extent5]。[LockoutEndDateUtc] AS [LockoutEndDateUtc],
[Extent5]。[LockoutEnabled] AS [LockoutEnabled],
[Extent5]。[AccessFailedCount] AS [AccessFailedCount],
〔Extent5]。[用户名] AS [用户名]
从[DBO]。[AspNetUsers] AS [Extent5]
WHERE [Extent5]。[ID] = @ p__linq__0)AS [Limit3]
INNER JOIN [DBO]。[AspNetUserLogins] AS [Extent6] ON [Limit3]。[ID] = [Extent6]。[用户ID])AS [UnionAll2]
ORDER BY [UnionAll2]。[C3 ] ASC,[UnionAll2] [C1] ASC',N'@ p__linq__0为nvarchar(4000),@ p__linq__0 = N'b73f9738-76ed-48d5-a8fd-cbf23a233fe9'


I'm using ASP.Net MVC 5 and I'm calling this line all over my code

string userId = User.Identity.GetUserId();

Does ASP.NET MVC go and fetch this from the table for each call, or does it get cached?

解决方案

It seems that the id along with the username are cached when you login.

I've used SQL Server Profiler and after logged in running User.Identity.GetUserId(); the identity system made no queries to the database.

This is the query made on loggin:

exec sp_executesql N'SELECT 
    [UnionAll2].[C2] AS [C1], 
    [UnionAll2].[C3] AS [C2], 
    [UnionAll2].[C4] AS [C3], 
    [UnionAll2].[C5] AS [C4], 
    [UnionAll2].[C6] AS [C5], 
    [UnionAll2].[C7] AS [C6], 
    [UnionAll2].[C8] AS [C7], 
    [UnionAll2].[C9] AS [C8], 
    [UnionAll2].[C10] AS [C9], 
    [UnionAll2].[C11] AS [C10], 
    [UnionAll2].[C12] AS [C11], 
    [UnionAll2].[C13] AS [C12], 
    [UnionAll2].[C14] AS [C13], 
    [UnionAll2].[C1] AS [C14], 
    [UnionAll2].[C15] AS [C15], 
    [UnionAll2].[C16] AS [C16], 
    [UnionAll2].[C17] AS [C17], 
    [UnionAll2].[C18] AS [C18], 
    [UnionAll2].[C19] AS [C19], 
    [UnionAll2].[C20] AS [C20], 
    [UnionAll2].[C21] AS [C21], 
    [UnionAll2].[C22] AS [C22], 
    [UnionAll2].[C23] AS [C23], 
    [UnionAll2].[C24] AS [C24], 
    [UnionAll2].[C25] AS [C25]
    FROM  (SELECT 
        [UnionAll1].[C1] AS [C1], 
        [UnionAll1].[AccessFailedCount] AS [C2], 
        [UnionAll1].[Id] AS [C3], 
        [UnionAll1].[Email] AS [C4], 
        [UnionAll1].[EmailConfirmed] AS [C5], 
        [UnionAll1].[PasswordHash] AS [C6], 
        [UnionAll1].[SecurityStamp] AS [C7], 
        [UnionAll1].[PhoneNumber] AS [C8], 
        [UnionAll1].[PhoneNumberConfirmed] AS [C9], 
        [UnionAll1].[TwoFactorEnabled] AS [C10], 
        [UnionAll1].[LockoutEndDateUtc] AS [C11], 
        [UnionAll1].[LockoutEnabled] AS [C12], 
        [UnionAll1].[AccessFailedCount1] AS [C13], 
        [UnionAll1].[UserName] AS [C14], 
        [UnionAll1].[UserId] AS [C15], 
        [UnionAll1].[RoleId] AS [C16], 
        [UnionAll1].[UserId1] AS [C17], 
        [UnionAll1].[C2] AS [C18], 
        [UnionAll1].[C3] AS [C19], 
        [UnionAll1].[C4] AS [C20], 
        [UnionAll1].[C5] AS [C21], 
        [UnionAll1].[C6] AS [C22], 
        [UnionAll1].[C7] AS [C23], 
        [UnionAll1].[C8] AS [C24], 
        [UnionAll1].[C9] AS [C25]
        FROM  (SELECT 
            CASE WHEN ([Extent2].[UserId] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1], 
            [Limit1].[AccessFailedCount] AS [AccessFailedCount], 
            [Limit1].[Id] AS [Id], 
            [Limit1].[Email] AS [Email], 
            [Limit1].[EmailConfirmed] AS [EmailConfirmed], 
            [Limit1].[PasswordHash] AS [PasswordHash], 
            [Limit1].[SecurityStamp] AS [SecurityStamp], 
            [Limit1].[PhoneNumber] AS [PhoneNumber], 
            [Limit1].[PhoneNumberConfirmed] AS [PhoneNumberConfirmed], 
            [Limit1].[TwoFactorEnabled] AS [TwoFactorEnabled], 
            [Limit1].[LockoutEndDateUtc] AS [LockoutEndDateUtc], 
            [Limit1].[LockoutEnabled] AS [LockoutEnabled], 
            [Limit1].[AccessFailedCount] AS [AccessFailedCount1], 
            [Limit1].[UserName] AS [UserName], 
            [Extent2].[UserId] AS [UserId], 
            [Extent2].[RoleId] AS [RoleId], 
            [Extent2].[UserId] AS [UserId1], 
            CAST(NULL AS int) AS [C2], 
            CAST(NULL AS varchar(1)) AS [C3], 
            CAST(NULL AS varchar(1)) AS [C4], 
            CAST(NULL AS varchar(1)) AS [C5], 
            CAST(NULL AS varchar(1)) AS [C6], 
            CAST(NULL AS varchar(1)) AS [C7], 
            CAST(NULL AS varchar(1)) AS [C8], 
            CAST(NULL AS varchar(1)) AS [C9]
            FROM   (SELECT TOP (1) 
                [Extent1].[Id] AS [Id], 
                [Extent1].[Email] AS [Email], 
                [Extent1].[EmailConfirmed] AS [EmailConfirmed], 
                [Extent1].[PasswordHash] AS [PasswordHash], 
                [Extent1].[SecurityStamp] AS [SecurityStamp], 
                [Extent1].[PhoneNumber] AS [PhoneNumber], 
                [Extent1].[PhoneNumberConfirmed] AS [PhoneNumberConfirmed], 
                [Extent1].[TwoFactorEnabled] AS [TwoFactorEnabled], 
                [Extent1].[LockoutEndDateUtc] AS [LockoutEndDateUtc], 
                [Extent1].[LockoutEnabled] AS [LockoutEnabled], 
                [Extent1].[AccessFailedCount] AS [AccessFailedCount], 
                [Extent1].[UserName] AS [UserName]
                FROM [dbo].[AspNetUsers] AS [Extent1]
                WHERE [Extent1].[Id] = @p__linq__0 ) AS [Limit1]
            LEFT OUTER JOIN [dbo].[AspNetUserRoles] AS [Extent2] ON [Limit1].[Id] = [Extent2].[UserId]
        UNION ALL
            SELECT 
            2 AS [C1], 
            [Limit2].[AccessFailedCount] AS [AccessFailedCount], 
            [Limit2].[Id] AS [Id], 
            [Limit2].[Email] AS [Email], 
            [Limit2].[EmailConfirmed] AS [EmailConfirmed], 
            [Limit2].[PasswordHash] AS [PasswordHash], 
            [Limit2].[SecurityStamp] AS [SecurityStamp], 
            [Limit2].[PhoneNumber] AS [PhoneNumber], 
            [Limit2].[PhoneNumberConfirmed] AS [PhoneNumberConfirmed], 
            [Limit2].[TwoFactorEnabled] AS [TwoFactorEnabled], 
            [Limit2].[LockoutEndDateUtc] AS [LockoutEndDateUtc], 
            [Limit2].[LockoutEnabled] AS [LockoutEnabled], 
            [Limit2].[AccessFailedCount] AS [AccessFailedCount1], 
            [Limit2].[UserName] AS [UserName], 
            CAST(NULL AS varchar(1)) AS [C2], 
            CAST(NULL AS varchar(1)) AS [C3], 
            CAST(NULL AS varchar(1)) AS [C4], 
            [Extent4].[Id] AS [Id1], 
            [Extent4].[UserId] AS [UserId], 
            [Extent4].[ClaimType] AS [ClaimType], 
            [Extent4].[ClaimValue] AS [ClaimValue], 
            CAST(NULL AS varchar(1)) AS [C5], 
            CAST(NULL AS varchar(1)) AS [C6], 
            CAST(NULL AS varchar(1)) AS [C7], 
            CAST(NULL AS varchar(1)) AS [C8]
            FROM   (SELECT TOP (1) 
                [Extent3].[Id] AS [Id], 
                [Extent3].[Email] AS [Email], 
                [Extent3].[EmailConfirmed] AS [EmailConfirmed], 
                [Extent3].[PasswordHash] AS [PasswordHash], 
                [Extent3].[SecurityStamp] AS [SecurityStamp], 
                [Extent3].[PhoneNumber] AS [PhoneNumber], 
                [Extent3].[PhoneNumberConfirmed] AS [PhoneNumberConfirmed], 
                [Extent3].[TwoFactorEnabled] AS [TwoFactorEnabled], 
                [Extent3].[LockoutEndDateUtc] AS [LockoutEndDateUtc], 
                [Extent3].[LockoutEnabled] AS [LockoutEnabled], 
                [Extent3].[AccessFailedCount] AS [AccessFailedCount], 
                [Extent3].[UserName] AS [UserName]
                FROM [dbo].[AspNetUsers] AS [Extent3]
                WHERE [Extent3].[Id] = @p__linq__0 ) AS [Limit2]
            INNER JOIN [dbo].[AspNetUserClaims] AS [Extent4] ON [Limit2].[Id] = [Extent4].[UserId]) AS [UnionAll1]
    UNION ALL
        SELECT 
        3 AS [C1], 
        [Limit3].[AccessFailedCount] AS [AccessFailedCount], 
        [Limit3].[Id] AS [Id], 
        [Limit3].[Email] AS [Email], 
        [Limit3].[EmailConfirmed] AS [EmailConfirmed], 
        [Limit3].[PasswordHash] AS [PasswordHash], 
        [Limit3].[SecurityStamp] AS [SecurityStamp], 
        [Limit3].[PhoneNumber] AS [PhoneNumber], 
        [Limit3].[PhoneNumberConfirmed] AS [PhoneNumberConfirmed], 
        [Limit3].[TwoFactorEnabled] AS [TwoFactorEnabled], 
        [Limit3].[LockoutEndDateUtc] AS [LockoutEndDateUtc], 
        [Limit3].[LockoutEnabled] AS [LockoutEnabled], 
        [Limit3].[AccessFailedCount] AS [AccessFailedCount1], 
        [Limit3].[UserName] AS [UserName], 
        CAST(NULL AS varchar(1)) AS [C2], 
        CAST(NULL AS varchar(1)) AS [C3], 
        CAST(NULL AS varchar(1)) AS [C4], 
        CAST(NULL AS int) AS [C5], 
        CAST(NULL AS varchar(1)) AS [C6], 
        CAST(NULL AS varchar(1)) AS [C7], 
        CAST(NULL AS varchar(1)) AS [C8], 
        [Extent6].[LoginProvider] AS [LoginProvider], 
        [Extent6].[ProviderKey] AS [ProviderKey], 
        [Extent6].[UserId] AS [UserId], 
        [Extent6].[UserId] AS [UserId1]
        FROM   (SELECT TOP (1) 
            [Extent5].[Id] AS [Id], 
            [Extent5].[Email] AS [Email], 
            [Extent5].[EmailConfirmed] AS [EmailConfirmed], 
            [Extent5].[PasswordHash] AS [PasswordHash], 
            [Extent5].[SecurityStamp] AS [SecurityStamp], 
            [Extent5].[PhoneNumber] AS [PhoneNumber], 
            [Extent5].[PhoneNumberConfirmed] AS [PhoneNumberConfirmed], 
            [Extent5].[TwoFactorEnabled] AS [TwoFactorEnabled], 
            [Extent5].[LockoutEndDateUtc] AS [LockoutEndDateUtc], 
            [Extent5].[LockoutEnabled] AS [LockoutEnabled], 
            [Extent5].[AccessFailedCount] AS [AccessFailedCount], 
            [Extent5].[UserName] AS [UserName]
            FROM [dbo].[AspNetUsers] AS [Extent5]
            WHERE [Extent5].[Id] = @p__linq__0 ) AS [Limit3]
        INNER JOIN [dbo].[AspNetUserLogins] AS [Extent6] ON [Limit3].[Id] = [Extent6].[UserId]) AS [UnionAll2]
    ORDER BY [UnionAll2].[C3] ASC, [UnionAll2].[C1] ASC',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'b73f9738-76ed-48d5-a8fd-cbf23a233fe9'

这篇关于被User.Identity.GetUserId缓存还是从数据库中每次取?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-23 10:30