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

本文介绍了解决Entity Framework验证失败的具体步骤。通过调试追踪DbEntityValidationException可以定位具体字段的问题所在。文章分享了一个实例:因字段长度调整导致的验证错误及解决方法。
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、付费专栏及课程。

余额充值