пользовательская аннотация данных в частичных метаданных не работает - PullRequest
0 голосов
/ 04 мая 2018

Я реализую пользовательскую аннотацию данных, и в основной модели она работает правильно, но когда я помещаю аннотацию данных в частичную метаду, проверка не находит эту аннотацию данных.

мой код выглядит следующим образом:

public partial class register
{
    public int id { get; set; }
    public long idPerson { get; set; }
    public string other { get; set; }
}

public partial class register_Metadata
{
    [MyAttributeOne("val1")]
    public int id { get; set; }

    [MyAttributeOne("val1")]
    public long idPerson { get; set; }

    public string other { get; set; }
}

Пространство имен двух классов одинаковое.

С другой стороны, у меня есть класс, где я связываю два частичных класса.

[MetadataType(typeof( register_Metadata))]
public partial class register
{
}

Когда я проверяю поле с настроенными метаданными, функция свойств всегда имеет 0 результатов

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var properties = this.GetInvolvedProperties(validationContext.ObjectType);
        var numberOfRequiredFields = RequireFromGroupAttribute.GetNumberOfRequiredFields(validationContext.ObjectType, this.Selector);

        var values = new List<object> { value };
        var otherPropertiesValues = properties.Where(p => p.Key.Name != validationContext.MemberName).Select(p => p.Key.GetValue(validationContext.ObjectInstance));
        values.AddRange(otherPropertiesValues);

        if (values.Count(s => !string.IsNullOrWhiteSpace(Convert.ToString(s))) >= numberOfRequiredFields)
        {                
            return ValidationResult.Success;
        }

        return new ValidationResult(this.GetErrorMessage(numberOfRequiredFields, properties.Values), new List<string> { validationContext.MemberName });
    }

private Dictionary<PropertyInfo, string> GetInvolvedProperties(Type type)
    {
        return type.GetProperties()
                   .Where(p => p.IsDefined(typeof(RequireFromGroupFieldAttribute)) &&
                               p.GetCustomAttribute<RequireFromGroupFieldAttribute>().Selector == this.Selector)
                   .ToDictionary(p => p, p => p.IsDefined(typeof(DisplayAttribute)) ? p.GetCustomAttribute<DisplayAttribute>().Name : p.Name);
    }

Я изменил аннотацию данных на основной класс, а затем в функции свойств у меня есть два параметра для оценки. Однако когда я помещаю их в класс метаданных, это не работает.

...