C# 向Identity users表添加软删除

C# 向Identity users表添加软删除,c#,entity-framework,asp.net-mvc-5,asp.net-identity-2,C#,Entity Framework,Asp.net Mvc 5,Asp.net Identity 2,我已经在我的Users表中添加了一个deleted at列,但显然,Identity framework提供的注册新用户方法仍然可以在数据库中看到这些用户,有没有办法告诉它忽略某个列 注册 // this needs to ignore any DeletedAt where not null var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { ... } /

我已经在我的Users表中添加了一个deleted at列,但显然,Identity framework提供的注册新用户方法仍然可以在数据库中看到这些用户,有没有办法告诉它忽略某个列

注册

// this needs to ignore any DeletedAt where not null
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
    ...
}
// this needs to ignore any DeletedAt where not null
result = await SignInManager.PasswordSignInAsync( user.UserName, model.Password, model.RememberMe, shouldLockout: true );
登录

// this needs to ignore any DeletedAt where not null
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
    ...
}
// this needs to ignore any DeletedAt where not null
result = await SignInManager.PasswordSignInAsync( user.UserName, model.Password, model.RememberMe, shouldLockout: true );

…以及任何其他正在进行的外部登录操作都需要告知该列。

在您的
signInManager
覆盖
SignInAsync
方法中,此方法用于每个登录过程(本地或外部)


对于登录:您想检查用户是否“已删除”,并且不允许他登录?关于注册问题是什么?只需从
SignInManager
继承并添加对
IsDeleted
tmg的检查-我不希望登录方法允许被删除的用户登录…/谢谢TrailMax我只是想知道,在这种情况下,你会如何处理[其他]问题?我假设我需要返回一个值为[Failure]的[SignInStatus]模型,使其看起来用户不存在,但没有可使用的返回参数。您需要做些什么才能使其返回故障,使其在屏幕上可见(即,对于登录,请说检查您的详细信息,然后重试,因为登录不存在)@Hanho您是对的,您不能返回
SignInStatus
。您可以尝试创建自定义
UserStore
并过滤掉
IsDeleted
用户,以便
UserManager
方法在尝试检索用户时返回“failure”(失败)。我在过去一个月一直在尝试按照您的建议执行操作,但我仍然无法确定将其放置在何处。我尝试在自定义用户存储中重写用户对象(结果发现我无法使用linq对其进行筛选并将其放回IDBSet-安全地将其转换为IDBSet将返回null)。在ApplicationDbContext中也是这样。我尝试使用FindByIdAsync方法,检查用户是否被删除,并返回0(哪种类型有效),但如果返回0,它将返回一个异常-这不是我所期望的。你知道我可以去哪里吗?谢谢你的帮助,tmg,这似乎是我需要的。当尝试使用IsDeleted项目登录时,它会成功识别该项目已被删除并停止登录。但是我发现,如果您尝试使用与已删除的电子邮件地址相同的电子邮件地址注册新用户,则会抛出一个错误,我猜这是由于处理身份的方式造成的(不允许电子邮件地址重复)。你知道我如何覆盖它,使它只检查主键的ID吗?