【问题标题】:How to update security stamp of users in bulk? Asp.net Identity如何批量更新用户的安全印章? Asp.net 身份
【发布时间】:2017-04-05 18:36:46
【问题描述】:

当用户被停用时,我正在更新用户安全标记。我可以为这样的一位用户执行此操作。

await UserManager.UpdateSecurityStampAsync(userId);

我想以多个用户的形式执行此操作,例如 500 个或可能是 100 个。 有什么办法可以批量完成吗?

我正在使用实体框架。

【问题讨论】:

  • EF 在批量更新方面不是很好。你可以执行 SQL 查询吗?
  • 是的,但不知道如何使用 sql 对每个用户调用 UpdateSecurityStampAsync(Id)。

标签: asp.net entity-framework asp.net-web-api asp.net-identity


【解决方案1】:

Security Stamp 是一个随机字符串,与实际值无关,因此您可以在其中填充新的 GUID。

批量执行的最佳方法是执行 SQL 查询:

update ApplicationUsers set SecurityStamp = NEWID()

您可以根据需要指定where 子句来限制您需要更新的用户,并且您很可能需要将表的名称更改为您在数据库中实际拥有的名称。

有不同的方法来执行这个查询 - 你可以用 EF 来做到这一点:

context.Database.ExecuteSqlCommand("UPDATE ApplicationUsers........"); 

或者您可以查看已经推荐的 EF.Extended 库 - 无需深入了解 SQL 即可进行批量更新。

【讨论】:

  • 接受你回答提示'安全标记只是一个随机字符串':)
  • @mfahadi 很高兴它有帮助!
【解决方案2】:

您可以使用实体框架扩展库。这是最快的更新方式。扩展库批量更新无需在修改之前检索和加载实体。因此非常快.试试看。

他们文档中的示例:

//update all tasks with status of 1 to status of 2
context.Tasks
    .Where(t => t.StatusId == 1)
    .Update(t => new Task { StatusId = 2 });

您可以在这里阅读更多信息:Entity Framework Extended Library

【讨论】:

  • 实际上我必须为每个用户调用这个函数,你能告诉我该怎么做吗? UserManager.UpdateSecurityStampAsync(userId)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2014-03-22
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多