为什么ASP.Net Identity不支持Delete操作

12

我正在尝试使用最近在Visual Studio 2013中发布的新验证功能。

在实现自定义UserStore时,我查看了随附的UserStore Microsoft.AspNet.Identity.EntityFramework.UserStore<TUser>的反编译源代码。我注意到删除用户的方法不受支持:

  public class UserStore<TUser> : IUserLoginStore<TUser>, IUserClaimStore<TUser>, IUserRoleStore<TUser>, IUserPasswordStore<TUser>, IUserSecurityStampStore<TUser>, IUserStore<TUser>, IDisposable where TUser : IdentityUser
  {
       // other stuff omitted

    public virtual Task DeleteAsync(TUser user)
    {
      throw new NotSupportedException();
    }
  }

这很奇怪,不是吗?为什么不支持删除用户?

我承认我记不起来我写过的任何一个生产系统会硬删除用户记录,但我不明白为什么不支持这个功能。

是因为技术原因还是因为微软认为删除用户记录是“不好的”,所以将其留给开发人员覆盖该方法呢?

更新

为了理解ASP.NET团队的想法,我搜索了DeleteAsync(TUser user)的框架用法。似乎没有任何东西会调用它。因此,它们完全可以省略IUserStore<TUser>接口中的该成员。

我的结论是,如果您需要并且愿意,可以实现它,以及如何实现它。它只会被您的应用程序代码或未来的用户管理库调用。

2个回答

5

除非您首先将用户从任何活动角色中移除,否则DeleteAsync将失败。 - iCollect.it Ltd
正确,但您始终可以更改数据库关系,强制在用户和角色之间进行“级联删除”。我没有尝试过,但它应该可以正常工作。 - Gianpiero
对我来说默默失败了。用户没有从数据库中删除 :( - Zero3

4

我们在1.0版本中没有足够的时间来完成它,它将作为Update 1的一部分添加到其余的管理员相关API中,例如UserManager上的IQueryable Users属性。(它已经实现在每晚的1.1-alpha1包中了)


好的。那么,为什么不使用“NotImplementedException”呢?我知道这只是语义上的区别,但它似乎更加合适。顺便说一句,新的身份验证系统做得很好。我编写了一个与RavenDB配合使用的自定义用户存储库。我将其插入到开箱即用的UserManager中,它的工作方式完全符合我的预期。 - Ronnie Overby
我今天自己看了这个。ASP.NET Identity (v1.1)的下一个版本发布有计划的日期吗?使用内置的删除功能比实现自己的功能要好! - loxdog
我们很快会发布一个alpha版本(现在是2.0而不是1.1,因为在EF模型层面上有一些重大变化)。 - Hao Kung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接