【问题标题】:Solution for "Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."“一个或多个实体的验证失败。有关详细信息,请参阅 'EntityValidationErrors' 属性”的解决方案。
【发布时间】:2014-02-24 12:02:55
【问题描述】:

我遇到了这个错误,它没有提供任何关于根本原因的详细信息,但我弄清楚了问题所在。我想分享它,以便其他遇到它的人能够成功解决问题。

我有以下课程:

    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。在尝试创建新用户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);
    }

【问题讨论】:

  • 您应该将您的解决方案作为答案发布,然后接受您自己的答案,因为它确实不是在寻找答案。
  • 谢谢!我已经在下面添加了。

标签: entity-framework validation asp.net-mvc-5


【解决方案1】:

解决方案 我必须将电子邮件添加为表单中的字段或删除必填属性。一旦我做了其中任何一个,代码就会按预期工作。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    如果您使用实体框架:

    错误消息(来自 PMC 中的 Update-Database 命令): 一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。

    解决方案: 此问题的一个原因是运行 Seed 方法时出现验证错误。有关调试 Seed 方法的提示,请参阅 Seeding and Debugging Entity Framework (EF) DBs。

    欲了解更多信息,请访问:Advanced Entity Framework 6 Scenarios for an MVC 5 Web Application (12 of 12)

    希望这会有所帮助...

    【讨论】:

      【解决方案3】:

      我认为您在创建 ApplicationUser 实例时传递了空值。 就我而言,我在 ViewModel 中设置了 Postcode 不是必需的,但在 IdentityModel 中 PostCode 仍然是必需的。 因此,您应该删除 IdentityModel 中 PostCode 的必需注释。并添加迁移到更新数据库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 2011-12-09
        • 1970-01-01
        • 2021-05-25
        • 2018-01-10
        • 2013-05-13
        • 1970-01-01
        相关资源
        最近更新 更多