Validation failed for one or more entities

本文介绍如何在EF编程中解决Validationfailed错误,通过使用System.Data.Entity.Validation.DbEntityValidationException类来查看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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值