/// <summary> /// Порядок проверки. /// 1 - проверка наличия объекта в контексте. /// 2 - проверка по notNull полям /// </summary> /// <param name="item"></param> /// <returns></returns> public ValidateContextResult Validate(TEntity item) { ValidateContextResult result = new ValidateContextResult(); result.Status = ResultStatus.Success; //if (_applicationContext.Set<TEntity>().Local.FirstOrDefault(x => x == item) == null) //{ // result.AddError("Объект не найден в контексте для проверки обязательных полей"); //} //else //{ var entry = _applicationContext.Entry(item); var properties = _applicationContext.Entry(item).Metadata.GetProperties(); ValidateContextResultItem validateContextResultItem = new ValidateContextResultItem() { Name = GetNameFieldOrClass(entry.Entity.GetType()) }; foreach (var property in properties) { //TODO: Сделать валидацию вложенных объектов // if (entry.Entity is DomainObject) // result.Merge(Validate(entry.Entity)); // else // { var value = property.PropertyInfo?.GetValue(entry.Entity); if (!property.IsNullable && value == null) { validateContextResultItem.Fields.Add(new ValidateContextResultItem() { Name = GetNameFieldOrClass(property.PropertyInfo) }); } // } } if (validateContextResultItem.Fields.Count() > 0) { result.AddEntity(validateContextResultItem); } // } return(result); }
/// <summary> /// Формирование сообщения с ошибкой /// </summary> /// <param name="index"></param> /// <returns></returns> private string CreateErrorMessage(ValidateContextResultItem entity) { string messageError = string.Empty; if (entity.Fields?.Count > 0) { messageError = (!string.IsNullOrWhiteSpace(Message) ? Environment.NewLine : "") + $"Не пройдена проверка записи \"{entity.Name}\":"; } else { messageError = Environment.NewLine + $"Не заполнено значение \"{entity.Name}\"."; } foreach (var field in entity.Fields) { messageError += CreateErrorMessage(field); } return(messageError); }
public void AddEntity(ValidateContextResultItem entity) { AddError(CreateErrorMessage(entity)); _listEntity.Add(entity); }