2011-03-24 10 views
29

मैं एक भ्रामक समस्या का सामना करना पड़ रहा है, जहां मेरे संपादित कार्रवाई परिणाम तरीकों में या बनाएँ, EF4 भीतरी बताने वाले संदेश के साथ एक DbEntityValidationException फेंक जाने वाली अधिकतम स्ट्रिंग लंबाई:इकाई की रूपरेखा मान्यता भ्रम - '128'

फ़ील्ड बॉडी को '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; } 
} 

"द बॉडी" वास्तविक डेटाबेस में फ़ील्ड प्रकार पाठ की है, इसलिए वहाँ कोई स्पष्ट सीमा नहीं है। डेटा है कि मैं पोस्ट करने के लिए कोशिश कर रहा हूँ यह है:

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

और अंत में, विधि है कि वास्तव में घुरघुराना करता है:

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

पद्धति संपादित करें का एक उदाहरण इस तरह दिखता है काम है:

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

मैं कोड में या डेटाबेस में कुछ भी नहीं देख सकता जो समस्या पैदा कर सकता है, तो मुझे और कहां देखना चाहिए?

उत्तर

60

पहले कोड में स्ट्रिंग फ़ील्ड की डिफ़ॉल्ट लंबाई 128 है। यदि आप ईएफ सत्यापन का उपयोग कर रहे हैं तो यह अपवाद फेंक देगा। आप का उपयोग करके आकार का विस्तार कर सकते हैं:

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

इस पोस्ट में किसी भी तरह से लोकप्रिय हो गया तो मैं दूसरे दृष्टिकोण है जो भी काम करता है जोड़ रहा:

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

StringLengthAttribute विधानसभा और MaxLengthAttribute है System.ComponentModel.DataAnnotations से है EntityFramework असेंबली (ईएफ 4.1) से।

+0

जादू के अनुसार बदलें। वह समस्या थी। धन्यवाद। –

+0

इसने मेरे लिए समस्या तय की, लेकिन हमारे मामले में यह कुछ तैनाती पर एक समस्या थी, न कि दूसरों को। ईएफ 4.1 डीएल के थोड़ा अलग संस्करण को तैनात किया गया था। – tpower

+0

बढ़िया! तुमने मेरा दिन बना दिया। –

2

यदि आपको मॉडल पहले दृष्टिकोण का उपयोग करके यह त्रुटि मिलती है, तो ईएफ मॉडल की जांच करें: यह हो सकता है कि आप जिस इकाई को अपडेट कर रहे हैं उस पर एक संपत्ति Max Length विशेषता सेट है।

0

हो सकता है आप

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

का इस्तेमाल किया है OnModelCreating में अपने dbcontext वर्ग पर। तो अपनी लंबाई

संबंधित मुद्दे