【发布时间】: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