社区服务器用户名问题-在成员资格存储中找不到用户用户名不存在

时间:2020-03-06 14:57:58  来源:igfitidea点击:

每当在特定sectionID上遍历googlesitemap.ashx时,在社区服务器安装中经常会发生错误。我怀疑用户名已被修改,但帖子并未重新缓存以反映这一点。

有没有一种方法可以通过对数据库执行选择语句来检查数据完整性,或者有没有办法强制数据库重新缓存?

解决方案

答案不是很多,但是我们可以通过运行以下查询来找到受影响的数据条目...

Select * 
FROM cs_Posts
Where UserID Not In (Select UserID 
                     From cs_Users Where UserAccountStatus = 2)

如果社区服务器发现不在MemberRoleProfileProvider实例中的用户,则可能引发此错误。

请参见CommunityServer.Users AddMembershipDataToUser()作为示例。

更新:

我注意到用户名存储在两个表cs_Users和aspnet_Users中,从而解决了我的问题。结果以某种方式在每个表中用户名都不同。手动更新,使名称相同可以解决此问题。

同样,用户将在存储过程cs_Membership_GetUsersByName的以下行中退出成员资格:

INSERT INTO @tbUsers
  SELECT UserId
  FROM   dbo.aspnet_Users ar, @tbNames t
  WHERE  LOWER(t.Name) = ar.LoweredUserName AND ar.ApplicationId = @ApplicationId

@tbNames是在某些时候来自cs_Users(?)的名称表,因此用户名不匹配,并且以后未将用户插入结果中。

另请参阅:http://dev.communityserver.com/forums/t/490899.aspx?PageIndex=2