捕获和解决实体验证错误

时间:2011-08-18 15:51:51

标签: c# .net entity-framework-4.1

我正在使用代码优先的EF 4.1将数据插入SQL Server数据库。当字符串属性的值大于映射中设置的最大值时,EF会抛出DbEntityValidationExceptionEntityValidationsErrors包含问题的详细信息。

有没有办法以编程方式解决错误?

具体来说,我想截断相关属性,记录“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;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我会在属性上添加StringLength属性。

这里有好文章 http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

[StringLength(64, "this needs to be less than 64")]
public string MyStringProperty { get; set; }

答案 1 :(得分:0)

从我读过的所有内容中,无法在ValidationAttribute的{​​{1}}来电期间更改媒体资源的价值。我找不到任何具体说不可能的东西,但所有迹象都表明没有。