Я столкнулся с запутанной проблемой, когда в моих методах результата действия Edit или Create, EF4 выбрасывает DbEntityValidationException с внутренним сообщением, гласящим:
Поле Body должно быть строкой или ... тип массива с максимальной длиной '128'.
Модель, о которой идет речь, выглядит следующим образом:
[Table("tblArticles")]
public class Article
{
[Key]
public int ID { get; set; }
[Required(ErrorMessage="Title must be included")]
public string Title { get; set; }
[AllowHtml]
public string Body { get; set; }
[Required(ErrorMessage="Start Date must be specified")]
[Display(Name="Start Date")]
[DisplayFormat(DataFormatString="dd-mm-yyyy")]
public DateTime? StartDate { get; set; }
[Required(ErrorMessage = "End Date must be specified")]
[Display(Name = "End Date")]
public DateTime? EndDate { get; set; }
public int Priority { get; set; }
public bool Archived { get; set; }
public virtual ICollection<ArticleImage> Images { get; set; }
}
Поле "Body" в реальной базе данных имеет тип Text, поэтому там нет очевидного ограничения. Данные, которые я пытаюсь опубликовать, выглядят так:
Это пример для подтверждения того, что новые статьи выглядят правильно.
Пример метода Edit выглядит так:
[HttpPost]
public ActionResult Edit(Article article)
{
if (ModelState.IsValid)
{
try
{
articleRepository.Update(article);
}
catch (DbEntityValidationException dbevEx)
{
ErrorSignal.FromCurrentContext().Raise(dbevEx);
ModelState.AddModelError("FORM", dbevEx);
return View("Edit", article);
}
// Other exception handling happens...
}
return RedirectToAction("Index");
}
И, наконец, метод, который действительно выполняет работу:
public void Update(T Entity)
{
dbset.Attach(Entity);
db.Entry(Entity).State = System.Data.EntityState.Modified;
db.Commit();
}
Я не вижу ничего в коде или в базе данных, что могло бы вызвать проблему, так где еще мне искать?