按项目删除AppUserLogins

时间:2018-01-03 08:34:45

标签: c# asp.net-identity

我有一个自定义的AppUserStore。当我想删除用户的登录时,我遇到了问题。例如,用户可以使用链接或谷歌登录。 现在,如果他想删除其中一个外部登录,则会全部删除。

使用的代码下方:

    Task IUserLoginStore<AppUser, int>.RemoveLoginAsync(AppUser user, UserLoginInfo login)
    {
        AppUserLogin externalLogin = DataContext.Entry<AppUser>(user).Entity.AppUserLogins
            .FirstOrDefault(l => l.LoginProvider == login.LoginProvider && l.ProviderKey == login.ProviderKey);

        if (externalLogin != null)
        {
            DataContext.Entry<AppUser>(user).Entity.AppUserLogins.Remove(externalLogin);
        }
        return DataContext.SaveChangesAsync();
    }

我对这一行有疑问:
DataContext.Entry(用户).Entity.AppUserLogins.Remove(externalLogin);

我不明白为什么所有 AppUserLogins 都被删除了。

1 个答案:

答案 0 :(得分:0)

好的,我发现为什么会遇到这个问题。这是因为所有AppUserLogins的id都是0.这是因为在数据库中我只有3列:UserId,LoginProvider和ProviderKey。

所以当我做的时候覆盖属性Id

    public override int Id
    {
        get { return (UserId.ToString() + LoginProvider + ProviderKey).GetHashCode(); }
        set { Id = (UserId.ToString() + LoginProvider + ProviderKey).GetHashCode(); }
    }

现在,每个AppUserLogins都有一个唯一的ID,我可以按项目删除它们。