【问题标题】:ASP.NET MVC 4 C# HttpPostedFileBase, EntityValidationErrors Save into DBASP.NET MVC 4 C# HttpPostedFileBase,EntityValidationErrors 保存到数据库中
【发布时间】:2014-08-05 05:36:42
【问题描述】:

在我的数据库中,我的 FileLocation 是 VarChar(Max) 我不确定是什么导致了这个 EntityValidationErrors -System.Data.Entity.Validation.DbEntityValidationException:一个或多个实体的验证失败。 db.SaveChanges() 函数运行时出现此错误;

型号:

   public Assignment()
    {
        this.CourseAvailables = new HashSet<CourseAvailable>();
    }

    public string AssignmentID { get; set; }
    public Nullable<System.DateTime> SubmissionDate { get; set; }
    public string Status { get; set; }
    public Nullable<decimal> Mark { get; set; }
    public string Comments { get; set; }
    public string FileLocation  { get; set; }

    public virtual ICollection<CourseAvailable> CourseAvailables { get; set; }
}

控制器:

        [HttpPost]
      public ActionResult Create(Assignment assignment)
    {
    if (ModelState.IsValid)
    {

        if (Request.Files.Count > 0)
        {
            HttpPostedFileBase assignmentFile = Request.Files[0];
            if (assignmentFile.ContentLength > 0)
            {
                var fileName = Path.GetFileName(assignmentFile.FileName);
                assignment.FileLocation = Path.Combine(Server.MapPath("~/Content/Image"), fileName);
                assignmentFile.SaveAs(assignment.FileLocation);
            }


        }
            db.Assignments.Add(assignment);        
            db.SaveChanges();    
            return RedirectToAction("Index");
    }
    return View(assignment);
}

查看:

<% using (Html.BeginForm("Create", "Assignment", FormMethod.Post, new { enctype = "multipart/form-data" }))
  <%: Html.TextBoxFor(model => model.FileLocation, new { type="file"})%>
  <%: Html.ValidationMessageFor(model => model.FileLocation) %>

【问题讨论】:

  • DbEntityValidationException弹出时,打开inner exception节点。 EF 中问题的真正原因存储在内部异常而不是顶层异常中。更多信息:stackoverflow.com/a/16347943/298573
  • 非常感谢,System.Data.SqlClient.SqlException:字符串或二进制数据将被截断。语句已终止。那么我可以知道是什么导致了这个错误吗?
  • 尝试在数据库中保存相对路径:assignment.FileLocation = Server.MapPath("~/Content/Image") + fileName;
  • 如果您知道该目录将始终相同,那么您只能保存文件名:assignment.FileLocation = fileName;,获取时:Path.Combine(Server.MapPath("~/Content/Image/"), fileName)
  • String or binary data would be truncated 表示您有一个长度为 5 的数据库字段,并且您正在保存一个长度为 5+n(大于 5)的值。增加字段的长度。

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 httppostedfilebase


【解决方案1】:

它是否提到了哪一列的数据会被截断?您尝试保存到该列的数据太长,即超过了定义的最大长度。

【讨论】:

  • 我的意思是,我还没有代表在 OP 下方发表评论。
【解决方案2】:

检查您的数据库并确保您的其他列配置正确。如果数据库中的相应列的数据类型和/或数据长度未正确设置,则状态、注释和标记都可能导致问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2013-04-08
    • 2011-08-23
    相关资源
    最近更新 更多