【问题标题】:ASP.NET Membership Provider and how to soft delete an account?ASP.NET Membership Provider 以及如何软删除帐户?
【发布时间】:2013-08-29 14:45:42
【问题描述】:

我正在使用 MVC3、EF5、C#、Sql Server 2008 R2。

我将 Membership Provider 与我自己的一些“组织”表结合使用,并带有指向成员资格表的链接表。

当我在我的应用程序中取消帐户时,我会执行软删除,这对我的表来说很好。但是,我不确定我应该如何处理相关帐户的会员记录。理想情况下,我也想软删除记录。

问题是,当我尝试使用与已取消帐户相同的用户名创建新帐户时,我收到“用户名已存在。请输入不同的用户名”。类型错误。

显然我可以硬删除会员用户,但这意味着我在我的应用程序中硬删除我不希望这样做的所有相关记录。

想法。

谢谢。

【问题讨论】:

  • 您使用什么会员提供商 - 新的通用会员提供商或旧会员提供商?
  • Errrr。我猜是旧版。我有 aspnet_Membership 等表。我做错了选择吗?
  • 我假设“软删除”只是 IsDeleted = true 在某处的列中?

标签: asp.net-mvc asp.net-mvc-3 asp.net-membership


【解决方案1】:

您可以编写自定义成员资格提供程序并覆盖 DeleteUser 方法并执行您需要的任何逻辑。

【讨论】:

    【解决方案2】:

    默认会员提供者需要一个唯一的用户名,您可以在用户名前加上一些前缀,以便多个用户可以使用相同的名称,或者在软删除时修改用户名以包含一些前缀,以便可以重复使用。老实说,两者都不是特别好,但除非您添加自己的“显示名称”字段,否则您会受到约束。

    【讨论】:

    • 是的,有趣的解决方法。可能最好在软删除上为用户名添加前缀。我已经阅读了一篇关于使用软删除而不是触发器/存档数据库的智慧的文章,所以现在可能会在中期发生变化。
    • 我过去所做的是将会员提供者的用户名设置为 guid 并使用电子邮件地址进行标识,无论如何它们必须是唯一的,然后您可以有一个显示名称允许重复。它需要一点点,但不是太难。
    【解决方案3】:

    您正在使用使用存储过程的旧版 ASP.Net 成员资格提供程序。这对您的情况来说是个好消息,因为它比使用实体框架的新的新通用提供程序更容易修改。

    最简单的方法是创建一个表来跟踪已删除的用户。 (您可能已经根据您的问题创建了它。)

    那你要修改aspnet_Users_DeleteUser存储过程为

    • 将 UserId 插入 DeletedUsers 表而不是删除用户。
    • 将用户名和电子邮件更改为在末尾附加 GUID 之类的内容(以便具有相同用户名和电子邮件地址的用户可以再次注册)

    还将 aspnet_Membership 表的 IsApproved 列更新为 false,以防止再次使用该用户名登录。

    【讨论】:

    • 非常有帮助,谢谢。我确实实现了汤姆的前缀想法,效果很好,但你的回答也很有帮助......所以以上都是答案!所以会选择汤姆的,因为他最初是这样的。不过还是非常感谢你。
    猜你喜欢
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    相关资源
    最近更新 更多