我已使用企业库验证机制阅读并搜索了此问题。这个非常简单的表单应用程序演示了该问验证程序将忽略Metadata类。我试图在具有实体框架的MVC应用程序中使用它。
这是在Linux SP3上使用VS 2008的.NEt 3.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; }
}
}
它们都在同一个文件中用于演示目的。如果我将StringLengthAttribute移动到主类,它确实有效。
非常感谢任何见解。
由于
答案 0 :(得分:1)
您看到的问题是,在Customer2
类中,CustomerName是一个字段,但在CustMetadata
类中,CustomerName是一个属性。
如果您将CustMetadata
更改为:
public class CustMetadata
{
[StringLengthValidator(0, 20)]
public string CustomerName;
}
然后按预期工作。
验证应用程序块在匹配MetaData时使用MemberType和Name。