Поймать и устранить ошибки проверки сущности - PullRequest
3 голосов
/ 18 августа 2011

Я использую первый код EF 4.1 для вставки данных в базу данных SQL Server.Когда строковое свойство имеет значение, превышающее максимальное значение, установленное в отображении, EF выдает DbEntityValidationException, в котором EntityValidationsErrors содержит сведения о проблеме.

Есть ли какой-либо способ разрешить ошибки программно?

В частности, я хотел бы усечь рассматриваемое свойство, записать уведомление «Свойство X усеченное» для дальнейшего использования и повторить попытку 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 голосов
/ 29 августа 2011

Из всего, что я прочитал, невозможно изменить значение свойства во время вызова ValidationAttribute IsValid().Я не могу найти ничего, что конкретно говорит, что это невозможно, но все признаки указывают на нет.

0 голосов
/ 18 августа 2011

Я бы поставил атрибут 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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...