Validation failed for one or more entities. See ‘EntityValidationErrors’解决方法

轻松解决EF中ValidationFailed问题
本文介绍如何在EF编程中遇到ValidationFailed错误时,通过使用DbEntityValidationException类轻松定位到具体字段的问题所在,包括如何查看EntityValidationErrors详细信息。

Validation failed for one or more entities. See ‘EntityValidationErrors’解决方法

Validation failed for one or more entities. See ‘EntityValidationErrors’ property for moredetails. Unfortunately there is no further information about

关于如何查看 EntityValidationErrors 详细信息的解决方法

我们在 EF 的编程中,有时候会遇到这样一个错误:
这里写图片描述

但是,按照他的提示 “See ‘EntityValidationErrors’ property for more details.” 去 Exception 中查看,却只能看到
这里写图片描述

并不能看到具体的是那个属性为什么验证不通过,也许不少人都遇到这种情况。

这里给大家介绍一个Exception类,让我们能够轻松的知道具体的哪一个字段出了什么问题。

那就是 System.Data.Entity.Validation.DbEntityValidationException,相信代码都知道怎么写了,最简单的就是

try
{
// 写数据库
}
catch (DbEntityValidationException dbEx)
{

}

在 dbEx 里面中我们就可以看到
这里写图片描述

这样子我们就能看到 EntityValidationErrors 所有的 ValidationErrors 的详细信息了。

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.出现错误,源代码如下 [HttpPost] public ActionResult AddTask(string title, string content, string deadline, string priority, string status, HttpPostedFileBase file) { // 处理标题 if (string.IsNullOrEmpty(title)) { ModelState.AddModelError("title", "任务标题不能为空"); return View("TaskAdd"); } // 处理截止日期 DateTime? parsedDeadline = null; if (!string.IsNullOrEmpty(deadline)) { if (!DateTime.TryParse(deadline, out DateTime dt)) { ModelState.AddModelError("deadline", "截止日期格式不正确"); return View("TaskAdd"); } parsedDeadline = dt; } // 处理优先级 if (!sbyte.TryParse(priority, out sbyte p) || p < 1 || p > 3) { ModelState.AddModelError("priority", "优先级设置不正确"); return View("TaskAdd"); } // 处理状态 if (!sbyte.TryParse(status, out sbyte s) || s < 0 || s > 2) { ModelState.AddModelError("status", "状态设置不正确"); return View("TaskAdd"); } // 创建实体时使用正确的变量名 var newTask = new task { id = Guid.NewGuid().ToString().Replace("-", ""), title = title, // 对应表单的 name="title" content = content ?? "", create_time = DateTime.Now, deadline = parsedDeadline, priority = p, status = s, }; db.tasks.Add(newTask); db.SaveChanges(); // 若字段名匹配,此处应能正常保存 var attachments = Request.Files; // 获取所有上传的文件 for (int i = 0; i < attachments.Count; i++) { var files = attachments[i]; // 验证:只处理有内容的文件 try { // 准备文件存储路径 var uploadDir = Server.MapPath("~/Uploads"); // 服务器存储目录 if (!Directory.Exists(uploadDir)) { Directory.CreateDirectory(uploadDir); // 目录不存在则创建 } // 生成唯一文件名(避免重复覆盖) var fileName = Guid.NewGuid() + Path.GetExtension(files.FileName); var path = Path.Combine(Server.MapPath("~/Uploads"), fileName); files.SaveAs(path); //保存文件到服务器 //file.SaveAs(savePath); //创建附件实体并关联任务 var newAttachment = new task_attachment { id = Guid.NewGuid().ToString().Replace("-", ""), originalname = files.FileName, filename = fileName, file_path = path, file_size = files.ContentLength, // 文件大小(字节) upload_time = DateTime.Now, }; db.task_attachment.Add(newAttachment); } catch (IOException ex) { ModelState.AddModelError("attachment", $"文件写入失败:{ex.Message}"); return View("TaskAdd"); } catch (UnauthorizedAccessException ex) { ModelState.AddModelError("attachment", $"权限不足,无法上传文件:{ex.Message}"); return View("TaskAdd"); } catch (Exception ex) { ModelState.AddModelError("attachment", $"文件上传失败:{ex.Message}"); return View("TaskAdd"); } } // 7. 保存附件信息到数据库 db.SaveChanges(); return RedirectToAction("TaskAdd"); }
最新发布
08-16
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值