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?
Looking at the decompiled sources of Microsoft.AspNet.Identity.Core.dll, you can see that it retrieves the user id from the claims of the current identity. So it doesn't fetch this info from the database.
public static string GetUserId(this IIdentity identity)
{
if (identity == null)
throw new ArgumentNullException("identity");
ClaimsIdentity identity1 = identity as ClaimsIdentity;
if (identity1 != null)
return IdentityExtensions.FindFirstValue(identity1, "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier");
return (string) null;
}
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'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With