При удалении пользователя, которого я хочу чтобы установить для пользовательского свойства IsDeleted значение true вместо удаления пользователя из базы данных. В этом случае другой пользователь может использовать имя пользователя пользователя, для которого IsDeleted установлено значение true.
Но по умолчанию UserManager.CreateAsync(user , пароль); метод предотвращает это.
Я переопределил метод ValidateEntity IdentityDbContext вот так
Код: Выделить всё
protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary items)
{
if ((entityEntry != null) && (entityEntry.State == EntityState.Added))
{
ApplicationUser user = entityEntry.Entity as ApplicationUser;
if ((user != null) && this.Users.Any(u => string.Equals(u.UserName, user.UserName) && u.IsDeleted==false))
{
return new DbEntityValidationResult(entityEntry, new List()) {
ValidationErrors = {
new DbValidationError("User", string.Format(CultureInfo.CurrentCulture,
"", new object[] { user.UserName }))
}
};
}
IdentityRole role = entityEntry.Entity as IdentityRole;
if ((role != null) && this.Roles.Any(r => string.Equals(r.Name, role.Name)))
{
return new DbEntityValidationResult(entityEntry, new List()) {
ValidationErrors = {
new DbValidationError("Role", string.Format(CultureInfo.CurrentCulture,
"", new object[] { role.Name })) } };
}
}
return base.ValidateEntity(entityEntry, items);
}
Код: Выделить всё
public async Task Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser() { UserName = model.UserName, Email = model.Email.ToLower(), CreatedBy = model.UserName, CreatedDate = DateTime.UtcNow, };
user.ConfirmedEmail = false;
var result = await _accountService.CreateAsync(user, model.Password);
if (result.Succeeded)
{
TempData["MessageConfirm"] = user.Email;
return RedirectToAction("Confirm", "Account");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Код: Выделить всё
ValidateEntityМетод
Есть предложения, как этого добиться?
Подробнее здесь: https://stackoverflow.com/questions/290 ... ramework-1