C# 使用验证程序时忽略.Net 3.5元数据类型

C# 使用验证程序时忽略.Net 3.5元数据类型,c#,enterprise-library,C#,Enterprise Library,我已经通过企业库验证机制阅读并搜索了这个问题。这个非常简单的表单应用程序演示了这个问题。验证程序将忽略元数据类。我试图在一个带有实体框架的MVC应用程序中使用它 这是在XP SP3上使用VS 2008的.NET3.5中实现的 namespace ValidationTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private

我已经通过企业库验证机制阅读并搜索了这个问题。这个非常简单的表单应用程序演示了这个问题。验证程序将忽略元数据类。我试图在一个带有实体框架的MVC应用程序中使用它

这是在XP SP3上使用VS 2008的.NET3.5中实现的

namespace ValidationTest
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

        string longname = "this is much too long to be a name";
        Customer2 cust = new Customer2(longname);

        ValidationResults r = Validation.Validate<Customer2>(cust);
        if (!r.IsValid)
        {
            throw new ArgumentException();
        }
    }
}


public partial class Customer2
{

    public string CustomerName;

    public Customer2(string name)
    {

        CustomerName = name;
    }

}

[MetadataType(typeof(CustMetadata))]
public partial class Customer2
{
}

public class CustMetadata
{
    [StringLengthValidator(0, 20)]
    public string CustomerName { get; set; }
}

}
命名空间验证测试
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
string longname=“这太长,不能作为名称”;
Customer2 cust=新Customer2(longname);
ValidationResults r=验证。验证(cust);
如果(!r.IsValid)
{
抛出新ArgumentException();
}
}
}
公共部分类Customer2
{
公共字符串客户名称;
公共Customer2(字符串名称)
{
客户名称=名称;
}
}
[元数据类型(typeof(CustMetadata))]
公共部分类Customer2
{
}
公共类元数据
{
[StringLengthValidator(0,20)]
公共字符串CustomerName{get;set;}
}
}
出于演示目的,它们都位于同一个文件中。如果我将StringLength移动到主类,它确实会起作用

如有任何见解,将不胜感激


谢谢

您看到的问题是,在
Customer2
类中,CustomerName是一个字段,而在
CustomerName
类中,CustomerName是一个属性

如果将
custmata
更改为:

public class CustMetadata
{
    [StringLengthValidator(0, 20)]
    public string CustomerName;
}
然后它就如预期的那样工作了


验证应用程序块在匹配元数据时同时使用和。

@Jerry-我复制了您的代码示例,它工作正常(它引发ArgumentException)!我能想到的唯一一件事是,您正在使用而不是使用Enterprise Library 5。你能用EL 4.1吗?