【发布时间】:2014-02-07 03:32:22
【问题描述】:
也许这是我的代码中的一些错误逻辑,但我首先在 C# 中有最新的 MVC EF 代码。当我查看 sql profiler 和昂贵的查询时,我注意到它正在获取这样的查询:
exec sp_executesql N'SELECT [UserId] FROM [Users] WHERE (UPPER([Email]) = @0)',
N'@0 nvarchar(71)',@0=N'myRegisteredEmail@someDomain.com'
这是因为我频繁请求WebSecurity.CurrentUserId 造成的吗?我以为只需要一次就可以了? (但我在一页中看到多个调用)。也许对WebSecurity.CurrentUserId 的每个请求也会导致系统从数据库中获取ID,将Email 作为识别用户的主要情况(我不希望这样)?
我有一些外键是用户的查询,但同样Users 表的主键是UserId,而不是电子邮件。为什么它会继续尝试通过电子邮件获取它?所以我也打消了这个念头。
因此我无法找到它会被多次获取的原因。
最后,这些查询最多需要四分之一秒。添加几次,页面加载速度很慢。
【问题讨论】:
-
WebSecurity.CurrentUserId 的代码是什么?它可能每次都调用数据库。
-
@rikitikitik 嗯,我不知道,是系统带来的价值,我无权控制。
-
如果是这种情况,您可能应该将获得的值存储到 Session 中,这样您就不会一直调用它。在不知道
CurrentUserId中发生了什么的情况下,我们无能为力。 -
@rikitikitik 我需要知道的最后一件事:将 CurrentUserId 存储到 Session 中是否安全?例如,我现在将使用新方法查询该用户的好友列表:会话中的值。它是否可以以某种方式被恶意更改,从而获得对该用户所有数据的访问权限,或者我可以通过每次需要时拉出 CurrentUserId 来相信它像以前一样安全?如果安全级别没有降低,请复制粘贴您在上一条评论中所说的内容,我很乐意接受此作为正确答案。
标签: c# sql-server asp.net-mvc performance entity-framework