加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

实体框架 – 实体框架验证混淆 – 最大字符串长度为’128′

发布时间:2020-12-15 19:09:26 所属栏目:asp.Net 来源:网络整理
导读:我面临一个令人困惑的问题,其中在我的编辑或创建操作结果方法,EF4将抛出一个DbEntityValidationException与内部消息说: The field Body must be a string or array type with a maximum length of ‘128’. 有问题的模型如下: [Table("tblArticles")]pub
我面临一个令人困惑的问题,其中在我的编辑或创建操作结果方法,EF4将抛出一个DbEntityValidationException与内部消息说:

The field Body must be a string or
array type with a maximum length of
‘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类型,因此没有明显的限制。我试图发布的数据是:

06001

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();
}

我在代码或数据库中看不到任何可能导致问题的东西,所以我应该在哪里看?

解决方法

代码中的字符串字段的默认长度为128.如果使用EF验证,它将抛出异常。您可以使用以下方式扩展大小:
[StringLength(Int32.MaxValue)]
public string Body { get; set; }

这篇文章变得多么流行,所以我添加第二种方法,也工作:

[MaxLength]
public string Body { get; set; }

StringLengthAttribute来自System.ComponentModel.DataAnnotations程序集,MaxLengthAttribute来自EntityFramework程序集(EF 4.1)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读