проверка на основе атрибутов в классе метаданных - PullRequest
0 голосов
/ 06 ноября 2010

Я выполняю проверку на основе атрибутов в файле metadata.cs.Я использую Entity Framework 4.0 и использую сервисы wcf ria.Я хочу знать, что эквивалентно Page.IsValid в asp.net в silverlight?Как мне убедиться, что объект находится в правильном состоянии перед его сохранением?Если я не гарантирую это, исключение срабатывает, что выглядит очень некрасиво.Я нашел свойство с именем entityName.ValidationErrorCount, поэтому, если моя сущность с именем User i do objUser.ValidationErrorCount меньше 0, я сохраняю ее.Проблема с этим подходом состоит в том, что если пользователь не вводит значение ни в одно из текстовых полей, то впоследствии все значения в сущности являются нулевыми.Таким образом, свойство ValidationErrorCount возвращает 0, поскольку все они являются нулевыми значениями, и поэтому моя программа пытается сохранить сущность, но, естественно, сущность находится в неправильном состоянии, поэтому возникает исключение.Как мне справиться с этой проблемой?

Надеюсь, у меня все ясно.Если нет, пожалуйста, дайте мне знать.Заранее спасибо:)

1 Ответ

2 голосов
/ 06 ноября 2010

Вы можете проверить сущность, используя класс Validator (из System.ComponentModel.DataAnnotations namespace), например так (где entity - это ссылка на проверяемую сущность):

List<ValidationResult> validationResults = new List<ValidationResult>();
ValidationContext validationContext = new ValidationContext(entity, null, null);
bool isValid = Validator.TryValidateObject(entity, validationContext, validationResults, true);

Или вы используете элемент управления DataForm? Если это так, есть еще более простой способ проверить, является ли текущий элемент действительным, вызвав метод ValidateItem () в DataForm. Это вернет логическое значение, указывающее, является ли текущий элемент действительным (вы также можете проверить свойство IsItemValid в DataForm). Он также обновит связанные элементы управления, чтобы показать их статус проверки. Если вы не используете DataForm, то это, безусловно, облегчит, если вы сможете. В противном случае просто добавьте результаты проверки в свойство ValidationErrors объекта:

foreach (ValidationResult result in validationResults)
    entity.ValidationErrors.Add(result);

Надеюсь, это поможет ...

Chris

...