C# 在实体框架中验证POCO对象
我正在用实体框架制作一个应用程序。我有以下代码:C# 在实体框架中验证POCO对象,c#,entity-framework,C#,Entity Framework,我正在用实体框架制作一个应用程序。我有以下代码: public class Entity : IValidatableObject { public int EntityId { get; set; } [MaxLength(10)] public string Name { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationC
public class Entity : IValidatableObject
{
public int EntityId { get; set; }
[MaxLength(10)]
public string Name { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext = null)
{
if (Name == "John")
yield return new ValidationResult("Not allowed.", new[] { "Name" });
}
public bool IsValid(ValidationContext validationContext = null)
{
return !Validate(validationContext).GetEnumerator().MoveNext();
}
}
但是,它们也使用“MaxLength”属性:
using (var dt = new DatabaseContext()) {
Entity en = new Entity();
en.Name = "01234567890";
dt.Entities.Add(en);
String err = dt.GetValidationErrors().First().ValidationErrors.First().ErrorMessage;
// err == "The field Name must be a string or array type with a maximum length of '10'."
}
using (var dt = new DatabaseContext()) {
Entity en = new Entity();
en.Name = "John";
en.IsValid; // false
en.Name = "01234567890";
en.IsValid = // true;
}
我编写的IsValid方法不知道MaxLength属性:
using (var dt = new DatabaseContext()) {
Entity en = new Entity();
en.Name = "01234567890";
dt.Entities.Add(en);
String err = dt.GetValidationErrors().First().ValidationErrors.First().ErrorMessage;
// err == "The field Name must be a string or array type with a maximum length of '10'."
}
using (var dt = new DatabaseContext()) {
Entity en = new Entity();
en.Name = "John";
en.IsValid; // false
en.Name = "01234567890";
en.IsValid = // true;
}
如何让我的
IsValid
方法了解实体框架验证器使用的数据注释属性?您可以尝试实现已接受答案中显示的示例。基本上只是手动强制调用数据注释检查,但我找不到更好的方法。谢谢。我使用TryValidateObject
而不是TryValidateProperty
找到了一个更简洁的解决方案。