我使用代碼優先的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;
}
}
}