Решение для "Проверка не выполнена для одного или нескольких объектов. Подробнее см." Свойство EntityValidationErrors "."

Я столкнулся с этой ошибкой, он не предоставил никаких подробностей о том, что было основной причиной, но я понял, в чем проблема. Я хотел бы поделиться им так, чтобы другие, сталкивающиеся с ним, могли успешно решить проблему.

У меня был следующий класс:

    public class BankUser : IdentityUser, IUserProfile
{
    #region IUserProfile Members
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Display(Name = "Last Name")]
    public string LastName { get; set; }

    [Required]
    [Display(Name = "Email Address")]
    [EmailAddress(ErrorMessage="Invalid Email Address")]
    public string Email { get; set; }

    [Display(Name = "Time Zone")]
    public int TimeZone { get; set; }
    public Dictionary<string, string> TimeZoneOptions
    {
        get
        {
            Dictionary<string, string> d = new Dictionary<string, string>();
            d.Add("(GMT -10:00) Hawaii", "-10");
            d.Add("(GMT -9:00) Alaska", "-9");
            d.Add("(GMT -8:00) Pacific Time", "-8");
            d.Add("(GMT -7:00) Mountain Time", "-7");
            d.Add("(GMT -6:00) Central Time", "-6");
            d.Add("(GMT -5:00) Eastern Time", "-5");
            d.Add("Unknown", "0");
            return d;
        }
    }

    [Display(Name = "Phone")]
    [Phone(ErrorMessage = "Invalid phone number.")]
    [StringLength(10, MinimumLength = 10, ErrorMessage = "Phone number must be 10 characters long.")]
    public string Phone { get; set; }
    #endregion
}

Как вы можете видеть, я расширил IdentityUser дополнительными свойствами. В моем представлении были только UserName и Password в качестве полей формы при попытке создать нового пользователя UserManager.CreateAsync(). При попытке отправить форму только с именем пользователя и паролем система попытается проверить, что этот адрес был отправлен, поскольку он имеет атрибут Обязательный.

        //
    // POST: /Account/Register
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new BankUser() { UserName = model.UserName };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                AddErrors(result);
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

Ответ 1

Решение Я должен либо добавить Email в качестве поля в моей форме, либо удалить атрибут Required. Как только я сделал любой из них, код работал как ожидалось.

Надеюсь, что это поможет.

Ответ 2

Если вы используете Entity Framework:

Сообщение об ошибке (из команды Update-Database в PMC): Не удалось выполнить проверку для одного или нескольких объектов. Дополнительную информацию см. В разделе Свойство EntityValidationErrors.

Решение: Одной из причин этой проблемы являются ошибки проверки при запуске метода Seed. См. Разделение и отладка баз данных Entity Framework (EF) для подсказок по отладке метода Seed.

Для получения дополнительной информации посетите: Расширенная инфраструктура Entity 6 Сценарии для веб-приложение MVC 5 (12 из 12)

Надеюсь, что это поможет...

Ответ 3

Я думаю, что вы передаете пустое значение при создании экземпляра ApplicationUser. В моем случае я устанавливаю Postcode не требуется в ViewModel, но в IdentityModel PostCode все еще требуется. Итак, вы должны удалить обязательную аннотацию PostCode в IdentityModel. И добавьте Migration для обновления базы данных.