首页 > 解决方案 > 使用元数据验证部分类

问题描述

我正在尝试验证具有部分类和元数据类的类。当我直接在类中指定属性时,验证有效,而当通过元数据时,则无效。如何验证我的课程?

public class EntityMetadata
{
    [Required] // when through metadata it doesn’t work
    public string Property { get; set; }
}

[MetadataType(typeof(EntityMetadata))]
public partial class Entity
{

}

public partial class Entity
{
    [Required] // when directly it works
    public string Property { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        Entity entity = new Entity();

        var context = new ValidationContext(entity, null, null);

        var results = new List<ValidationResult>();

        Validator.TryValidateObject(entity, context, results, true);

    }
}

标签: c#validation

解决方案


如果您使用 .NETFramework v4.7.x 和 System.ComponentModel.DataAnnotations,您可以在执行后在结果对象中找到验证:

results[0]

代码:

        Entity entity = new Entity();

        var context = new ValidationContext(entity, null, null);

        var results = new List<ValidationResult>();

        TypeDescriptor.AddProviderTransparent(
        new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Entity), typeof(EntityMetadata)), typeof(Entity));

        Validator.TryValidateObject(entity, context, results, true);

推荐阅读