【问题标题】:ASP.NET Validation failed for one or more entities一个或多个实体的 ASP.NET 验证失败
【发布时间】:2014-01-02 14:24:23
【问题描述】:

我有一个数据库驱动的 asp.net mvc 应用程序它有许多外键关系,但由于某种原因,当我想创建一个新的表时,我在外键和下拉框方面遇到问题记录我输入了所有字段,并在下拉框中选择了一个值,这些值是外键,但是当我单击保存时会引发此错误。

一个或多个实体的验证失败。看 'EntityValidationErrors' 属性以获取更多详细信息。代码优先

我知道是下拉列表导致了这种情况,因为我运行了一个 try catch,它生成了一个 .txt 文件,该文件输出了错误的特定详细信息,因为堆栈跟踪没有太多详细信息。我没有做任何与平常不同的事情。

我已经按照模型做了这个

    public virtual Employee Employee { get; set; }
    public virtual Employee Employee1 { get; set; }
    public virtual Fuel_Card Fuel_Card { get; set; }
    public virtual Vehicle Vehicle { get; set; }

这根据控制器的第一次创建方法

    public ActionResult Create()
    {
        ViewBag.emp1 = new SelectList(db.Employees, "Employee_ID", "Employee_ID");
        ViewBag.emp2 = new SelectList(db.Employees, "Employee_ID", "Employee_ID");
        ViewBag.FuelCardNumber = new SelectList(db.Fuel_Card, "Fuel_Card_Number", "Fuel_Card_Number");
        ViewBag.Registration = new SelectList(db.Vehicles, "Registration", "Registration");
        return View();
    }

这在第2

        ViewBag.emp1 = new SelectList(db.Employees, "Employee_ID", "Employee_ID", fuel_allocation.Requesting_Employee);
        ViewBag.emp2 = new SelectList(db.Employees, "Employee_ID", "Employee_ID", fuel_allocation.Authorising_Employee);
        ViewBag.FuelCardNumber = new SelectList(db.Fuel_Card, "Fuel_Card_Number", "Fuel_Card_Number", fuel_allocation.Fuel_Card_Number);
        ViewBag.Registration = new SelectList(db.Vehicles, "Registration", "Registration", fuel_allocation.Registration_Number);

这个在创建视图中

    <div class="editor-field">
        @Html.DropDownList("emp2", String.Empty)
        @Html.ValidationMessageFor(model => model.Authorising_Employee)
    </div>

我想知道以前是否有人遇到过这个问题?我尝试了各种不同的东西,当我使用 EditorFor 时外键关系有效,但是当我尝试使用下拉列表时它总是说它是空的。

我认为它可能对 2 个选择列表使用相同的数据库字段,但事实并非如此,因为我已经单独测试了它们

这是我输出到文件时遇到的错误

02/01/2014 14:52:56:类型为“Fuel_Allocation”的实体处于“已添加”状态 有以下验证错误: - 属性:“Authorising_Employee”,错误:“Authorising_Employee 字段是必需的。”

【问题讨论】:

标签: c# asp.net asp.net-mvc entity-framework


【解决方案1】:

EntityValidationErrors 应该包含您需要的所有详细信息。尝试将此代码添加到派生的 Context 类中:

public override int SaveChanges()
{
    try
    {
        base.SaveChanges();
    }
    catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
    {
        Exception exception = dbEx;
        foreach (var validationErrors in dbEx.EntityValidationErrors)
        {
            foreach (var validationError in validationErrors.ValidationErrors)
            {
                string message = string.Format("{0}:{1}", 
                    validationErrors.Entry.Entity.ToString(),
                    validationError.ErrorMessage);

                //create a new exception inserting the current one
                //as the InnerException
                exception = new InvalidOperationException(message, exception);
            }
        }
        throw exception;
    }
}

【讨论】:

  • 它已经提供了我需要的信息,但是对于为什么会发生错误没有任何意义,因为选择了一个值,但似乎不同意
  • @Crouch 如果您已经知道验证错误的详细信息,您是否介意将它们添加到问题中,因为它们对于帮助您解决根本问题至关重要。
  • 我现在将它添加到原始问题中。干杯
  • 你有没有用这个@Crouch得到任何地方?我目前遇到了与必填字段相同的问题,但它是计算出来的。
  • @Rob 抱歉,我现在不记得了,因为这个项目几个月前就停了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
相关资源
最近更新 更多