2011-03-24 7 views
29

'128' maksimum dizi uzunluğu:Varlık Çerçeve Onaylama karışıklık - eylem sonucu yöntemlerine benim Düzen veya oluşturun, EF4'ü iç ileti belirten bir DbEntityValidationException atacağım ben kafa karıştırıcı bir sorunla karşı karşıya ediyorum

Body gövdesi, maksimum uzunluğu '128' olan bir dize veya dizi türünde olmalıdır.

söz konusu modeli şöyle: gerçek veritabanında

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

"Vücut" alan türü Metin, yani orada hiçbir belirgin sınırı var. Ben göndermek için çalışıyorum veri şudur:

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

Ve aslında hırıltı yapar nihayet yöntemi:

<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> 

Düzenleme yöntemin bir örneği şöyle çalışma:

public void Update(T Entity) 
{ 
    dbset.Attach(Entity); 
    db.Entry(Entity).State = System.Data.EntityState.Modified; 
    db.Commit(); 
} 

Kodda veya veritabanında soruna neden olabilecek bir şey göremiyorum, başka nereye bakmalıyım?

cevap

60

Koddaki dize alanının varsayılan uzunluğu önce 128'dir. EF doğrulamasını kullanıyorsanız istisna atar. Sen kullanarak boyutunu uzatabilirsiniz:

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

StringLengthAttribute montaj ve MaxLengthAttribute olduğunu System.ComponentModel.DataAnnotations dan: Bu mesaj bu yüzden de çalıştığı ikinci yaklaşım ekliyorum nasılsa popüler oldu

[StringLength(Int32.MaxValue)] 
public string Body { get; set; } 

EntityFramework derlemesinden (EF 4.1).

+0

Magic. Sorun buydu. Teşekkürler. –

+0

Bu, benim için sorunu çözdü, ancak bizim durumumuzda, bazı dağıtımlarda sorun değil, başkaları için de bir problemdi. EF 4.1 dll'in biraz farklı bir sürümü dağıtıldı. – tpower

+0

Harika! U benim günümü yaptı. –

2

Model İlk yaklaşımını kullanarak bu hatayı alıyorsanız, EF Modeli'ni kontrol edin: güncellediğiniz Varlıktaki bir özelliğin Max Length öznitelik kümesine sahip olması basitçe olabilir.

0

Eğer OnModelCreating da DBContext sınıfının üzerinde

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

kullandık olabilir. Yani uzunluğunuza göre değiştirin