2011-03-24 8 views
29

「128」の文字列の最大長:Entity Frameworkの検証混乱 - アクションの結果の方法私の編集や作成、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; } 
} 

「本文」欄には、Text型であるので、そこには明確な制限はありません。私が投稿しようとしているデータは、このです:

<p> 
This is an example to confirm that new articles are looking right.</p> 
<p> 
<img alt="" src="http://www.google.co.nz/logos/2011/houdini11-sr.jpg" 
style="width: 160px; height: 56px; float: left;" /></p> 

編集方法の一例は次のようになります。

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

私は問題を引き起こしている可能性のあるコードやデータベースに何も表示されませんが、だから私はどこを見ますか?

答えて

60

コードの最初の文字列フィールドの長さは、最初は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)から

+0

マジック。それが問題でした。ありがとう。 –

+0

これは私の問題を解決しましたが、私たちの場合、いくつかの配備では問題であり、他の配備では問題でした。 EF 4.1 dllの少し異なるバージョンが展開されたことが分かります。 – tpower

+0

素晴らしい! Uは私の一日を作った。 –

2

モデルファーストアプローチを使用してこのエラーが発生した場合は、EFモデルを確認してください。単純に更新するエンティティのプロパティにMax Length属性が設定されている可能性があります。

0

あなたはOnModelCreatingであなたのdbcontextクラスで

Property(m => m.Body).IsRequired().HasMaxLength(128); 

を使用していても良いです。 あなたの長さに応じて変更する

関連する問題