我有一个数据库驱动的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();
}
这是在第二次
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字段是必需的。”
答案 0 :(得分: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;
}
}