2011-08-18 42 views
3

我使用代碼優先的EF 4.1將數據插入到SQL Server數據庫中。當字符串屬性的值大於映射中設置的最大值時,EF會拋出一個DbEntityValidationException,其中EntityValidationsErrors包含問題的詳細信息。捕獲並解析實體驗證錯誤

有沒有什麼辦法來以編程方式解決錯誤?

具體而言,我想截斷有問題的屬性,記錄「Property X Truncated」通知以備後用,並重新嘗試SaveChanges()

我創建了一個自定義ValidationAttribute,它檢查註釋屬性的長度,但無法弄清楚我是否可以同時更改屬性的長度。

public class TruncateAttribute : ValidationAttribute 
{ 
    public int TruncateLength { get; set; } 

    public TruncateAttribute(object truncateLength) 
    { 
     this.TruncateLength = (int) truncateLength; 
    } 
    protected override ValidationResult IsValid(object value, 
      ValidationContext validationContext) 
    { 
     var original = (string) value; 
     if (original.Length > this.TruncateLength) 
     { 
      value = original.Substring(0, 
        this.TruncateLength); // doesn't work 
      return new ValidationResult(
       string.Format("{0} is longer than {1} characters", 
        validationContext.DisplayName, this.TruncateLength), 
       new[] {validationContext.MemberName}); 
     } 
     else 
     { 
      return ValidationResult.Success; 
     } 
    } 
} 

回答

0

從一切我讀過一篇文章,是不可能改變ValidationAttributeIsValid()通話過程中屬性的值。我找不到任何明確表示不可能的事情,但所有跡象都表明不是。

相關問題