我有一个自定义的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 都被删除了。
答案 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,我可以按项目删除它们。