Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

本文介绍如何在使用Entity Framework Core时捕获并处理DbEntityValidationException异常。通过详细示例展示了如何在不同环境下(如控制台应用和Web应用)进行有效的错误信息收集与展示。
            try
            {
                // Your code...
                // Could also be before try if you know the exception occurs in SaveChanges

                context.SaveChanges();

            }
            //在应用程序中,用下面的版本,调试,查看errMsg
            catch (DbEntityValidationException e)
            {
                string errMsg = string.Empty;

                foreach (var eve in e.EntityValidationErrors)
                {
                    errMsg += string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                        eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        errMsg += string.Format("- Property: \"{0}\", Error: \"{1}\"",
                            ve.PropertyName, ve.ErrorMessage);
                    }
                }

                throw;
            }
            //在控制台,则直接输出
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                        eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                            ve.PropertyName, ve.ErrorMessage);
                    }
                }
                throw;
            }


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值